接続プーリングに c3p0 を使用していて、大きなデータ セットで「接続が閉じられました」というエラーに直面しています。私のトランザクションはアトミックで、最大 2 時間近く実行されると予想しています。
処理に約 40 ~ 45 分かかる大規模なデータ セットの場合。このデータを DB に永続化しようとすると、次の順序で例外が発生します。
[WARN] [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
[WARN] [c3p0] Another error has occurred [ java.sql.SQLRecoverableException: Closed Connection ] which will not be reported to listeners!
[ERROR] org.hibernate.transaction.JDBCTransaction: Could not toggle autocommit
java.sql.SQLRecoverableException: Closed Connection
[ERROR] org.hibernate.transaction.JDBCTransaction: JDBC rollback failed
[ERROR] org.springframework.transaction.interceptor.TransactionInterceptor: Application exception overridden by rollback exception.
私は解決策をたくさん調べてみましたが、それに応じて構成を更新しようとしました。これが私の C3P0 構成です。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${...}" />
<property name="jdbcUrl" value="${...}" />
<property name="user" value="${...}" />
<property name="password" value="${...}" />
<property name="initialPoolSize" value="2" />
<property name="minPoolSize" value="2" />
<property name="maxPoolSize" value="50" />
<property name="maxIdleTime" value="6000" />
<property name="maxIdleTimeExcessConnections" value="1800" />
<property name="idleConnectionTestPeriod" value="3600" />
<property name="checkoutTimeout" value="60000" />
<property name="acquireRetryAttempts" value="0" />
<property name="acquireRetryDelay" value="1000" />
<property name="numHelperThreads" value="1" />
<property name="preferredTestQuery" value="SELECT 1 FROM DUAL" />
</bean>
助けてください。