java - c3p0 中的关闭连接

标签 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>

在我的函数中,当我保存对象时,我关闭 session 。

   

 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 中的连接,我会发现所有连接都处于 sleep 状态,但应用程序卡住了。

我在这里缺少什么?

最佳答案

您无法可靠地close()连接(包装在 session 中),因此它们会泄漏。考虑当异常发生时会发生什么。

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

如果您修复了此问题但仍然遇到连接泄漏,c3p0 具有 configuration parameters帮助您追踪泄漏情况。

关于java - c3p0 中的关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39400037/

相关文章:

java - 按位运算符

php - 我想用数据库中的数据创建 html 卡

mysql - 如何选择相册,统计照片,每个相册选一张照片?

java - 在谷歌应用程序引擎上的 hibernate 中使用mysql重复id

Hibernate 4 (Jboss as 7) 无法自动检测实体并插入 PersistenceUnit,导致 `unknown entity` 异常

java - 自动调整 JTable 列宽

java - 如何设置java2ws类路径?

java - Hibernate:如何在一个连接表中注释三个表?

java - java中两个集合之间的公共(public)元素

php - laravel 4 preg_replace() : Parameter mismatch