Java 如何处理Hibernate连接
我刚开始冬眠。我已经创建了SessionFactory并获得了如下会话。我正在使用c3p0连接提供程序Java 如何处理Hibernate连接,java,hibernate,c3p0,Java,Hibernate,C3p0,我刚开始冬眠。我已经创建了SessionFactory并获得了如下会话。我正在使用c3p0连接提供程序 public static SessionFactory getSessionFactory() { try { if (sessionFactory == null) { Configuration configuration = loadDBConfiguration(); if (configuration != n
public static SessionFactory getSessionFactory() {
try {
if (sessionFactory == null) {
Configuration configuration = loadDBConfiguration();
if (configuration != null) {
sessionFactory = configuration.buildSessionFactory();
} else {
log.info("---- Configuration failed ----");
}
}
} catch (Exception ex) {
log.info("---- Initial SessionFactory creation failed ----");
}
return sessionFactory;
}
public static EntityManagerFactory getEntityManagerFactory() {
try {
Session session = getSessionFactory().openSession();
entityManagerFactory = session.getEntityManagerFactory();
} catch (Exception e) {
log.error(e);
}
return entityManagerFactory;
}
public static EntityManager getEntityManager() {
try {
EntityManagerFactory entityManagerFactory = getEntityManagerFactory();
return entityManagerFactory.createEntityManager();
} catch (Exception e) {
log.error(e);
}
return null;
}
我对下面的事情感到困惑
目前,在我的所有EntityManager类中,如UserManager、AccountsManager,都会调用getEntityManager()。在RDS中经过一段时间后,它显示了20个连接,甚至我的应用程序也没有处理任何用户请求。您应该关闭连接。由于您的连接是由数据库连接池包装的,因此它们不会在物理上关闭,但会返回到数据库连接池。这需要完成,否则连接池会认为连接正在使用,当您达到池限制时,将不会打开新连接。
将会话工厂保持为单例。您应该为每个线程打开一个新会话。您应该关闭连接。由于您的连接是由数据库连接池包装的,因此它们不会在物理上关闭,但会返回到数据库连接池。这需要完成,否则连接池会认为连接正在使用,当您达到池限制时,将不会打开新连接。 将会话工厂保持为单例。您应该为每个线程打开一个新会话