gpt4 book ai didi

mysql - 使用 Hibernate 和 mysql 的连接太多

转载 作者:可可西里 更新时间:2023-11-01 06:53:11 25 4
gpt4 key购买 nike

我正在使用 Hibernate 3 和 mysql sever 5.5 为带有 spring 3.0 的 myweb 应用程序

我遇到异常,因为连接太多......

我创建 session 的 java 文件如下:

public class DBConnection {

static{

}

public Session getSession(){

Session session = null;
SessionFactory sessionFactory= null;
sessionFactory = new Configuration().configure().buildSessionFactory();
session = sessionFactory.openSession();
return session;

}

}

我在需要 session 的地方调用这个方法

作为

Session session=new DBConnection().getSession();

及之后

transaction.commit();

我通过使用关闭 session

session.close();

请帮我解决问题......

我的 hibernate.cfg.xml 是:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/dbname</property>
<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">lax</property>
<property name="hibernate.connection.pool_size">100</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name=""></property>

<property name="hibernate.connection.release_mode">on_close</property>

</session-factory>
</hibernate-configuration>

最佳答案

这是因为您使用的连接池是在您构建 SessionFactory 时立即创建的,但只有在您打开 Session 时才会获取连接。现在,您正在关闭 session ,由于连接被释放,但没有关闭并被池阻止。现在,您再次创建一个 SessionFactory,从而创建一个新的池,然后获取一个 session ,从而创建一个新的连接等等......最终将达到允许的最大连接数。

您要做的是使用一个连接池(使用一个 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();
}
}

关于mysql - 使用 Hibernate 和 mysql 的连接太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10783547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com