Mysql
 sql >> Database >  >> RDS >> Mysql

Troppe connessioni usando Hibernate e mysql

Questo perché stai usando un pool di connessioni che è stato creato non appena crei SessionFactory, ma le connessioni vengono acquisite solo quando apri una Session. Ora stai chiudendo la sessione, a causa della quale le connessioni vengono rilasciate, ma non vengono chiuse e vengono bloccate dal pool. Ora stai nuovamente creando una SessionFactory, quindi creando un nuovo pool, quindi ottenendo una sessione, quindi creando una nuova connessione e così via.. che alla fine raggiungerà il numero massimo di connessioni consentite.

Quello che devi fare è usare un Connection Pool (usando una SessionFactory) e ottenere e rilasciare le connessioni dallo stesso pool.

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