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 .