Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nie można połączyć się z bazą danych po pewnym czasie wdrożenia na serwerze

We właściwościach konfiguracyjnych użyłeś właściwości c3p0 maxIdleTime, ale właściwości c3p0 są konfigurowane za pomocą c3p0. prefiks lub hibernate.c3p0. . Zwróć uwagę, że włączenie dowolnego z c3p0 Właściwości automatycznie włącza odpowiedniego dostawcę połączenia za pomocą heurystyki hibernacji. W logu nie widać, że używasz c3p0. Jeśli nie masz skonfigurowanych źródeł danych, Hibernate użyje hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider . Ten dostawca połączeń ma wbudowaną podstawową pulę połączeń, dla której można ustawić hibernate.connection.pool_size , ale jest używany tylko do celów programistycznych. Nigdy nie używaj go w środowisku produkcyjnym.

Możesz mieć niekończącą się dyskusję na temat Jak naprawić java.net.SocketException:uszkodzony potok . Po pewnym czasie zdasz sobie sprawę, że pozostałeś otwarty połączenia w basenie, które nagle zamykają się po drugiej stronie z następujących powodów:

  • Zapory ogniowe lub routery mogą blokować nieaktywne połączenia (protokół MySQL klient/serwer nie działa).
  • Serwer MySQL może zamykać bezczynne połączenia, które przekraczają wait_timeout lubinteractive_timeout próg.

Aby pomóc w rozwiązaniu tych problemów, można skorzystać z następujących wskazówek:

  • Używana jest najnowsza (5.1.13+) wersja sterownika JDBC.
  • Upewnij się, że wait_timeout i interactive_timeout są ustawione wystarczająco wysoko. Sprawdź, czy interactiveClient jest używany.
  • Upewnij się, że tcpKeepalive jest włączony.
  • Upewnij się, że wszelkie konfigurowalne ustawienia zapory sieciowej lub limitu czasu routera pozwalają na maksymalny oczekiwany czas bezczynności połączenia.
  • Upewnij się, że połączenia są prawidłowe, gdy są używane z puli połączeń. Użyj zapytania, które zaczyna się od /* ping */ wykonać lekkie polecenie ping zamiast pełnego zapytania. Zwróć uwagę, że składnia polecenia ping musi być dokładnie taka, jak określono tutaj.
  • Wyraźnie zweryfikuj połączenie przed jego użyciem, jeśli połączenie było bezczynne przez dłuższy czas.
  • Zminimalizuj czas, przez jaki obiekt połączenia pozostaje bezczynny, podczas gdy wykonywana jest inna logika aplikacji.

Aby zachować zgodność z niektórymi z tych opcji, lepiej użyj puli połączeń, z której możesz korzystać z Hibernate. Hibernate obsługuje commons-dbcp, c3p0 i proxool. Możesz także skonfigurować źródło danych JNDI na serwerze WWW do używania z hibernacją, ma pulę połączeń. Zobacz Rozdział 7 Pula połączeń ze złączem/J .

Jeśli chcesz skonfigurować Hibernate z c3p0, powinieneś przeczytać ten Jak skonfigurować pulę połączeń C3P0 . Przykładową konfigurację dbcp znajdziesz w tym poście Wyjątek MySQL, Hibernate i Broken Pipe . Niezależnie od tego, jaki zestaw połączeń użyjesz, zależy od Ciebie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grails:błąd w składni SQL przy zmianie dialektu hibernacji

  2. How-to:Ranking wyników wyszukiwania

  3. Używanie surowego zapytania Laravel z symbolem zastępczym

  4. Losowy ważony wybór wydarzenia

  5. Wysyłanie formularza za pomocą <input type =button>