最近在弄数据库连接池Proxool
注意:
<property name="hibernate.connection.release_mode">auto</property>
?
Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction
?
?
session.flush();??? // Only for last transaction in conversation
t.commit();???????? // Also return JDBC connection
session.close();??? // Only for last transaction in conversation
?
于是我又分别循环调用getSession().createQuery("from Users");getHibernateTemplate().find( "FROM Users);
?
?
?
Query query = this.getSession().createQuery(queryString.toString());
?
每刷新一次它得到了一个新连接,而不是把以前的连接重新激活使用
?
Java代码
SessionFactory sf = new Configuration().configure().buildSessionFactory();? ?
Session session = sf.openSession();??
?
每次openSession()获得一个session就建立了一条数据库连接,一个session其实就对应着一条连接?
??????? SessionFactory sf = new Configuration().configure().buildSessionFactory();
? ? ? ? Session session = sf.openSession();
?
?
以下代码连接正常,并且不会出现连接泄漏(没有关闭session)org.hibernate.Session s = org.trundle.db.HibernateUtils.getNewSession();s.createQuery("from Unit").list//没有关闭连接s.close();以下代码出现连接泄漏,如果最大连接数是100,那么代码执行100遍后出现堵塞现象
org.hibernate.Session s = org.trundle.db.HibernateUtils.getNewSession();s.beginTransaction();s.createQuery("from Unit").list();以下代码正常(关闭session)
org.hibernate.Session s = org.trundle.db.HibernateUtils.getNewSession();s.beginTransaction();s.createQuery("from Unit").list();s.close();结论
hibernate session在处理查询的时候就算没有显式的s.close()也会自动将连接放回连接池。但是如果包含事务处理,那么如果事务没有结束或者连接不关闭,那么就出现了连接被快速消耗的情况。本次测试环境:MYSQL 4.0.X tomcat 4.1 JDK1.4 Hibernate 3.1.3 proxool 0.8.0连接池关于session什么时候断开jdbc的连接什么时候连着是这样的: