sql >> Database >  >> RDS >> Mysql

Te veel verbindingen met Hibernate en mysql

Dit komt omdat u een verbindingspool gebruikt die is gemaakt zodra u SessionFactory bouwt, maar de verbindingen worden alleen verkregen wanneer u een sessie opent. Nu sluit je de sessie, waardoor verbindingen worden vrijgegeven, maar niet worden gesloten en worden opgehouden door het zwembad. Nu maak je opnieuw een SessionFactory aan, dus maak je een nieuwe pool aan, krijg je een sessie, maak je dus een nieuwe verbinding enzovoort.. die uiteindelijk het maximale aantal toegestane verbindingen zal bereiken.

Wat u moet doen is één Connection Pool gebruiken (met één SessionFactory) en de verbindingen uit dezelfde pool halen en vrijgeven.

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. Hoe kan ik initcap-functionaliteit in MySQL bereiken?

  2. Zelfstudie over SQL Server-tabelpartitionering en partities

  3. MySql selecteer formaat, ronde kolom

  4. Snelle manier om het aantal rijen van een tabel te ontdekken in PostgreSQL