c3p0

时间:2016-09-08 20:54:12

标签: java mysql hibernate c3p0

我从Hibernate开始。 由于我读到我需要配置池连接,所以我开始使用C3P0

一切都很好,但当我达到最大连接数时,应用程序会冻结,我必须关闭应用程序并重新启动它。

这是我在hibernate.cfg.xml中的C3P0部分

<property name="hibernate.c3p0.min_size">1</property> 
<property name="hibernate.c3p0.max_size">15</property>
<property name="hibernate.c3p0.timeout">3000</property>  
<property name="hibernate.c3p0.max_statements">20</property>
<property name="hibernate.c3p0.idle_test_period">300</property>

在保存对象时我的函数中关闭会话。

   

 public void Save item(Item item)throws Exception{    
            try{          
            SessionFactory sf= NewHibernateUtil.getSessionFactory();
            Session session;
            session = sf.openSession();
            Transaction tx= session.beginTransaction(); 
            session.save(item); 
            tx.commit();
            session.close();          
            }
            catch(Exception ex){
                throw new Exception(ex);
            }
        }

如果我检查MySql中的连接,我发现所有连接都处于休眠状态,但应用程序冻结了。

我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

您不可靠close()连接(包含在会话中),因此它们会泄漏。考虑一下异常发生时会发生什么。

要么使用Java 7+ try-with-resources,如果Session支持,要么使用旧的健壮的清理习惯用法,请参阅Appendix to my answer here

如果你修复了这个并且仍然遇到连接泄漏,c3p0有configuration parameters来帮助你追踪泄漏。