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

c3p0 se bloquea en getConnection cuando hay una falla en la red

Encontré el mismo problema. En mi caso, fue causado por el controlador JDBC que no estaba configurado para el tiempo de espera en fallas de socket. Hice las siguientes adiciones a mi C3P0 ComboPooledDataSource configuración:

cpds = new ComboPooledDataSource();
...

//--------------------------------------------------------------------------------------
// NOTE: Once you decide to use cpds.setProperties() to set some connection properties,
//       all properties must be set, including user/password, otherwise an exception
//       will be thrown
Properties prop = new Properties();
prop.setProperty("oracle.net.CONNECT_TIMEOUT",
    Integer.toString(JDBC_CONNECTION_TIMEOUT_IN_MILLISECONDS));
prop.setProperty("oracle.jdbc.ReadTimeout",
    Integer.toString(JDBC_SOCKET_TIMEOUT_IN_MILLISECONDS));
prop.setProperty("user", username);
prop.setProperty("password", password);
cpds.setProperties(prop);
//--------------------------------------------------------------------------------------

...

Las propiedades del controlador de Oracle se aplican cuando C3P0 crea la Connection objeto. Estas dos propiedades en particular harán que se genere una excepción si la conexión del socket está inactiva durante más de 30 segundos.

Si no se está conectando a una base de datos Oracle, existen propiedades similares para otros controladores JDBC para otros proveedores de bases de datos. Algunos de ellos se muestran cerca de la parte inferior de esta página .