sql >> Base de Datos >  >> RDS >> Mysql

Mi aplicación spring+hibernate no cierra las conexiones jdbc

El problema no estaba en las sesiones sino en el grupo de conexiones, las sesiones se administraban correctamente, pero el grupo de conexiones en la capa JDBC no cerraba las conexiones.

Estas son las cosas que hice para arreglarlos.

Configuración de contexto JDBC

1.- Cambió la fábrica de conexiones JDBC de la antigua BasicDataSourceFactory de tomcat a la nueva DataSourceFactory de tomcat

2.- Ajuste la configuración de JDBC en base a este artículo:http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency

Configuración xml de fábrica de sesiones

3.- Borrada esta línea de la configuración de fábrica de la sesión:

<prop key="hibernate.max_fetch_depth">1</prop>

Así es como terminó mi configuración:

Configuración de contexto JDBC

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/" override="true" reloadable="false" swallowOutput="false">
    <Resource name="jdbc/catWDB" auth="Container" type="javax.sql.DataSource"
              driverClassName="com.mysql.jdbc.Driver"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              url="@[email protected]"
              username="@[email protected]"
              password="@[email protected]"
              maxActive="200"
              maxIdle="50"
              minIdle="10"
              suspectTimeout="60"
              timeBetweenEvictionRunsMillis="30000"
              minEvictableIdleTimeMillis="60000"
              validationQuery="select 1"
              validationInterval="30000"
              testOnBorrow="true"
              removeAbandoned="true"
              removeAbandonedTimeout="60"
              abandonWhenPercentageFull="10"
              maxWait="10000"
              jdbcInterceptors="ResetAbandonedTimer;StatementFinalizer"
            />
</Context>

Configuración xml de fábrica de sesiones

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref local="dataSource"/>
        </property>
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
                <prop key="hibernate.max_fetch_depth">3</prop>
            </props>
        </property>
</bean>