sql >> Databáze >  >> RDS >> Oracle

c3p0 se zablokuje na getConnection, když dojde k selhání sítě

Setkal jsem se se stejným problémem. V mém případě to bylo způsobeno tím, že ovladač JDBC nebyl nastaven tak, aby vypršel časový limit při selhání soketu. Do svého C3P0 ComboPooledDataSource jsem přidal následující konfigurace:

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

...

Vlastnosti ovladače Oracle se použijí, když C3P0 vytvoří Connection objekt. Zejména tyto dvě vlastnosti způsobí vyvolání výjimky, pokud je soketové připojení neaktivní déle než 30 sekund.

Pokud se nepřipojujete k databázi Oracle, existují podobné vlastnosti pro další ovladače JDBC pro jiné dodavatele databází. Některé z nich jsou zobrazeny v dolní části tuto stránku .




  1. Použití php k vrácení hodnot GROUP_CONCAT('sloupec x').

  2. SQL Server 2008 R2 uvízl v režimu jednoho uživatele

  3. CodeIgniter Database Query pomocí query() s klauzulí IN

  4. Jak používat uživatelem definované proměnné v příkazu limit?