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

Zbyt wiele połączeń przy użyciu Hibernate i mysql

Dzieje się tak, ponieważ używasz puli połączeń, która została utworzona zaraz po zbudowaniu SessionFactory, ale połączenia są uzyskiwane dopiero po otwarciu sesji. Teraz zamykasz sesję, dzięki czemu połączenia są zwalniane, ale nie są zamykane i są wstrzymywane przez pulę. Teraz ponownie tworzysz SessionFactory, a tym samym tworzysz nową pulę, a następnie uzyskujesz sesję, a tym samym tworzysz nowe połączenie itd., które ostatecznie osiągnie maksymalną dozwoloną liczbę połączeń.

Musisz użyć jednej puli połączeń (przy użyciu jednej SessionFactory) oraz uzyskać i zwolnić połączenia z tej samej puli.

public class DBConnection {

      private static SessionFactory factory;
      static {
            factory = new Configuration().configure().buildSessionFactory();
      }

      public Session getSession() {
            return factory.openSession();
      }

      public void doWork() {
           Session session = getSession();
           // do work.
           session.close();
      }

     // Call this during shutdown
     public static void close() {
          factory.close();
     }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Losowe identyfikatory w sqlalchemy (pylony)

  2. Parser SQL w PHP?

  3. Błąd MySQL #1071 — Określony klucz był za długi; maksymalna długość klucza to 767 bajtów

  4. Zmień unikalny klucz razem w mysql

  5. Java - Wyjątek w głównym wątku java.lang.Błąd:nierozwiązane problemy z kompilacją