sql >> Databasteknik >  >> RDS >> Oracle

c3p0 hänger på getConnection när det finns ett nätverksfel

Jag stötte på samma problem. I mitt fall orsakades det av att JDBC-drivrutinen inte var inställd på timeout vid socketfel. Jag gjorde följande tillägg till min C3P0 ComboPooledDataSource konfiguration:

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-drivrutinens egenskaper tillämpas när C3P0 skapar Connection objekt. Särskilt dessa två egenskaper kommer att orsaka ett undantag om socket-anslutningen är inaktiv i mer än 30 sekunder.

Om du inte ansluter till en Oracle-databas finns det liknande egenskaper för andra JDBC-drivrutiner för andra databasleverantörer. Några av dem visas nära botten av denna sida .




  1. Fel vid laddning av MySQLdb-modul och pip-installation av MySQLdb

  2. mysql_ping hänger med Amazon RDS

  3. VÄLJ DISTINKT-värden efter en JOIN

  4. Skäl att vara optimistisk om framtiden för Microsoft Access