Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Muitas conexões usando Hibernate e mysql


Isso ocorre porque você está usando um pool de conexões que foi criado assim que você cria SessionFactory, mas as conexões são adquiridas somente quando você abre uma Session. Agora, você está fechando a sessão, devido à qual as conexões são liberadas, mas não são fechadas e são retidas pelo pool. Agora, você está novamente criando uma SessionFactory, criando um novo pool, obtendo uma sessão, criando uma nova conexão e assim por diante.. que eventualmente atingirá o número máximo de conexões permitidas.

O que você precisa fazer é usar um pool de conexões (usando uma SessionFactory) e obter e liberar as conexões do mesmo 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();
     }
}