Hibernate所需的C3P0设置是什么?

时间:2015-01-08 20:13:36

标签: java mysql hibernate jpa c3p0

我将Hibernate 4.3.0与MySQL和Tomcat一起使用。所有必需的库都在类路径中,这里是hibernate.cfg.xml

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">false</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.connection.autocommit">false</property>
<property name="current_session_context_class">thread</property>

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

<!-- Disable the second-level cache  -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

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

通过上述设置,在与数据库应用程序的20个连接不再连接之后,我在应用程序日志中找不到与此行为相关的信息。

有谁知道出了什么问题,以及如何正确设置c3p0和休眠?

1 个答案:

答案 0 :(得分:2)

设置很好。连接耗尽的原因是连接未正确释放。

请确保:

  • 成功提交交易
  • 失败时回滚事务
  • 完成后关闭你的Hibernate会话:

因此,如果您没有Spring代表您处理事务/会话管理,那么您应该如何操作Hibernate会话:

Session session = factory.openSession();
Transaction tx = null;
try {
   tx = session.beginTransaction();       
   ...
   tx.commit();
}
catch (Exception e) {
   if (tx!=null) tx.rollback(); 
}finally {
   session.close();
}