sql >> Base de Datos >  >> RDS >> Oracle

java.sql.SQLRecoverableException:volver a conectarse desde jdbc

Parece que algún cortafuegos u otra actividad está interrumpiendo la conexión. Hemos enfrentado un problema similar en el que la base de datos estaba terminando las conexiones que estaban inactivas durante 30 minutos.

Para superar el problema, hemos ajustado el grupo de bases de datos especificando las siguientes propiedades

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.

Reproducir el problema requerirá eliminar la conexión en el lado de la base de datos. Hemos realizado una pequeña prueba usando mssql en la que podemos terminar la conexión usando las herramientas del servidor y el grupo estaba estableciendo la conexión nuevamente.

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

Tenga en cuenta que timeBetweenEvictionRunsMillis está en milisondas.

La configuración anterior verificará la conexión no válida y los eliminará del grupo si la base de datos o el firewall los cierran abruptamente.