Сблъсках се със същия проблем. В моя случай това беше причинено от JDBC драйвера, който не беше настроен да изчаква при грешки на сокета. Направих следните допълнения към моя C3P0 ComboPooledDataSource
конфигурация:
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);
//--------------------------------------------------------------------------------------
...
Свойствата на драйвера на Oracle се прилагат, когато C3P0 създаде Connection
обект. Тези две свойства по-специално ще доведат до хвърляне на изключение, ако връзката на сокета е неактивна за повече от 30 секунди.
Ако не се свързвате към база данни на Oracle, има подобни свойства за други JDBC драйвери за други доставчици на бази данни. Някои от тях са показани в долната част на тази страница .