Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mon application spring + hibernate ne ferme pas les connexions jdbc

Le problème ne résidait pas dans les sessions mais dans le pool de connexions, les sessions étaient gérées correctement, mais le pool de connexions dans la couche JDBC ne fermait pas les connexions.

Ce sont les choses que j'ai faites pour les réparer.

Configuration du contexte JDBC

1.- Modification de la fabrique de connexions JDBC de l'ancienne BasicDataSourceFactory de tomcat à la nouvelle DataSourceFactory de tomcat

2.- Ajusté les paramètres JDBC en fonction de cet article :http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency

Configuration xml de l'usine de session

3.- Supprimez cette ligne de la configuration de l'usine de session :

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

Voici comment ma configuration s'est terminée :

Configuration du contexte 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>

Configuration xml de l'usine de session

<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>