Hibernate与MySQL的连接我的数据库没有关闭。在10秒内点击10次之后,我从MySQL Workbench(在我的开发机器中获得此连接统计数据。我是唯一的用户)。MySQL Workbench Server Status
我有那些
我的hibernate.cfg.xml
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">officenic</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/officenic</property>
<property name="hibernate.connection.username">officenic</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- configuration pool via c3p0 -->
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">100</property> <!-- seconds -->
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.timeout">100</property> <!-- seconds -->
我想在每次关闭会话时调用的代码块。
if (session == null)
return;
if (session.isOpen()) {
if (session.isDirty())
session.flush();
session.close();
System.out.println("Session closed");
}
我错过了什么吗?
答案 0 :(得分:5)
好吧,我似乎每次都在创建SessionFactory。这个链接有一个很好的类,使SessionFactory静态解决了这个问题。 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/tutorial.html#tutorial-firstapp-helpers
答案 1 :(得分:1)
private static final ThreadLocal<Session> session = new ThreadLocal<Session>();
public static void closeSession() throws HibernateException {
Session s = session.get();
if (s != null) {
s.close();
session.remove();
}
}
实际上我这样做是有效的