Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zu viele Verbindungen mit Hibernate und MySQL

Dies liegt daran, dass Sie einen Verbindungspool verwenden, der erstellt wurde, sobald Sie SessionFactory erstellt haben, aber die Verbindungen werden nur abgerufen, wenn Sie eine Sitzung öffnen. Jetzt schließen Sie die Sitzung, wodurch Verbindungen freigegeben, aber nicht geschlossen und vom Pool aufgehalten werden. Jetzt erstellen Sie erneut eine SessionFactory, erstellen also einen neuen Pool, erhalten dann eine Sitzung, erstellen also eine neue Verbindung und so weiter ... was schließlich die maximal zulässige Anzahl von Verbindungen erreichen wird.

Was Sie tun müssen, ist, einen Verbindungspool (mit einer SessionFactory) zu verwenden und die Verbindungen aus demselben Pool zu erhalten und freizugeben.

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();
     }
}