これは、SessionFactoryをビルドするとすぐに作成された接続プールを使用しているためですが、接続はセッションを開いたときにのみ取得されます。これで、接続が解放されたためにセッションを閉じていますが、閉じられておらず、プールによって保持されています。ここで、再びSessionFactoryを作成し、新しいプールを作成し、次にセッションを取得して、新しい接続を作成します。これにより、最終的に許可される接続の最大数に達します。
あなたがしなければならないのは、1つの接続プールを使用して(1つのSessionFactoryを使用して)、同じプールから接続を取得および解放することです。
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();
}
}