Oracle
 sql >> Baza danych >  >> RDS >> Oracle

java.sql.SQLRecoverableException — ponowne połączenie z jdbc

Wygląda na to, że połączenie zostało zerwane przez zaporę sieciową lub inną aktywność. Mieliśmy do czynienia z podobnym problemem, w którym baza danych przerywała połączenia, które były bezczynne przez 30 minut.

Aby rozwiązać ten problem, dostroiliśmy pulę baz danych, określając następujące właściwości

testOnBorrow:-Setting it true will force the pooling provider to run the validation query while handing out the connection to the application.
testWhileIdle:-Setting it true will enable the validation when the connection is sitting idle in the pool.
timeBetweenEvictionRunsMillis:- Setting this property to non-zero will allow the evictor thread to run,which will test the idle connections.

Odtworzenie problemu będzie wymagało przerwania połączenia po stronie bazy danych. Przeprowadziliśmy mały test przy użyciu mssql, w którym możemy zakończyć połączenie za pomocą narzędzi serwera, a pula ponownie nawiązała połączenie.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="${myjdbc.driverClassName}" />
    <property name="url" value="${myjdbc.url}" />
    <property name="username" value="${myjdbc.username}" />
    <property name="password" value="${myjdbc.password}" />
    <property name="testOnBorrow" value="true" />
    <property name="testWhileIdle" value="true" />
    <property name="timeBetweenEvictionRunsMillis" value="3000" />
</bean>

Zwróć uwagę, że czas międzyEvictionRunsMillis wynosi miliony.

Powyższa konfiguracja sprawdzi nieprawidłowe połączenie i usunie je z puli, jeśli zostaną nagle zamknięte przez bazę danych lub zaporę.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzystanie z kursora odniesienia Oracle w Javie bez zależności od Oracle

  2. Procedura rozwiązywania bez parametrów

  3. ORA-00937:Nie jest to funkcja pojedynczej grupy — błąd zapytania

  4. Oracle wybiera dane według ciągłych bloków dat

  5. Jak sprawdzić, z jakiego poziomu izolacji transakcji korzysta dowolna sesja Oracle?