Oracle
 sql >> Base de données >  >> RDS >> Oracle

c3p0 se bloque sur getConnection en cas de panne de réseau

J'ai rencontré le même problème. Dans mon cas, cela était dû au fait que le pilote JDBC n'était pas configuré pour expirer en cas d'échec du socket. J'ai fait les ajouts suivants à mon C3P0 ComboPooledDataSource configuration :

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);
//--------------------------------------------------------------------------------------

...

Les propriétés du pilote Oracle sont appliquées lorsque C3P0 crée la Connection objet. Ces deux propriétés en particulier entraîneront la levée d'une exception si la connexion socket est inactive pendant plus de 30 secondes.

Si vous ne vous connectez pas à une base de données Oracle, il existe des propriétés similaires pour d'autres pilotes JDBC pour d'autres fournisseurs de bases de données. Certains d'entre eux sont affichés au bas de cette page .