Mysql
 sql >> Database >  >> RDS >> Mysql

La mia app spring+hibernate non chiude le connessioni jdbc

Il problema non risiedeva nelle sessioni ma nel pool di connessioni, sessioni in cui venivano gestite correttamente, ma il pool di connessioni nel livello JDBC non chiudeva le connessioni.

Queste sono le cose che ho fatto per risolverli.

Configurazione del contesto JDBC

1.- Modificata la factory di connessione JDBC dalla vecchia BasicDataSourceFactory di Tomcat alla nuova DataSourceFactory di Tomcat

2.- Ottimizzazione delle impostazioni JDBC in base a questo articolo:http://www.tomcaexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency

Configurazione xml di Session Factory

3.- Eliminata questa riga dalla configurazione di fabbrica della sessione:

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

Ecco come è finita la mia configurazione:

Configurazione del contesto 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>

Configurazione xml di Session Factory

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