Il semble que la connexion soit abandonnée par un pare-feu ou une autre activité. Nous avons rencontré un problème similaire où la base de données mettait fin aux connexions qui étaient inactives pendant 30 minutes.
Pour surmonter le problème, nous avons réglé le pool de bases de données en spécifiant les propriétés suivantes
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.
Reproduire le problème nécessitera de couper la connexion côté base de données. Nous avons effectué un petit test à l'aide de mssql dans lequel nous pouvons mettre fin à la connexion à l'aide des outils serveur et le pool établissait à nouveau la connexion.
<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>
Notez que le timeBetweenEvictionRunsMillis est en millisonds.
La configuration ci-dessus vérifiera la connexion invalide et la supprimera du pool si elle est brusquement fermée par la base de données ou le pare-feu.