Vấn đề không phải do các phiên mà nằm trong nhóm kết nối, các phiên được quản lý đúng cách, nhưng nhóm kết nối trong lớp JDBC không đóng các kết nối.
Đây là những điều tôi đã làm để sửa chữa chúng.
Cấu hình ngữ cảnh JDBC
1.- Thay đổi nhà máy kết nối JDBC từ BasicDataSourceFactory cũ của tomcat thành DataSourceFactory mới của tomcat
2.- Điều chỉnh cài đặt JDBC dựa trên bài viết này: http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency
Cấu hình xml của nhà máy phiên
3.- Đã xóa dòng này khỏi cấu hình gốc của phiên:
<prop key="hibernate.max_fetch_depth">1</prop>
Đây là cách cấu hình của tôi kết thúc:
Cấu hình ngữ cảnh 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>
Cấu hình xml của nhà máy phiên
<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>