ファイアウォールまたはその他のアクティビティによって接続が切断されているようです。データベースが30分間アイドル状態だった接続を終了するという、同様の問題に直面しました。
この問題を解決するために、次のプロパティを指定してデータベースプールを調整しました
testOnBorrow:-Setting it true will force the pooling provider to run the validation query while handing out the connection to the application.
testWhileIdle:-Setting it true will enable the validation when the connection is sitting idle in the pool.
timeBetweenEvictionRunsMillis:- Setting this property to non-zero will allow the evictor thread to run,which will test the idle connections.
問題を再現するには、データベース側の接続を切断する必要があります。mssqlを使用して小さなテストを実行しました。サーバーツールを使用して接続を終了でき、プールは接続を再確立していました。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${myjdbc.driverClassName}" />
<property name="url" value="${myjdbc.url}" />
<property name="username" value="${myjdbc.username}" />
<property name="password" value="${myjdbc.password}" />
<property name="testOnBorrow" value="true" />
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="3000" />
</bean>
timeBetweenEvictionRunsMillisがミリゾンドであることに注意してください。
上記の構成では、無効な接続がチェックされ、データベースまたはファイアウォールによって突然閉じられた場合はプールから削除されます。