java - hibernate 所需的 C3P0 设置是什么?

标签 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 和 hibernate ?

最佳答案

设置没问题。连接耗尽的原因是连接没有正确释放。

确保你:

  • 成功提交交易
  • 失败时回滚事务
  • 完成后关闭 Hibernate session :

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

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

关于java - hibernate 所需的 C3P0 设置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27848743/

相关文章:

MySQL - 在自定义列上创建搜索

java - 来自单方的多对多关系需要来自另一方的 jpq

hibernate - Grails 2.4.3集成测试错误java.lang.NoClassDefFoundError:org/springframework/mock/web/MockAsyncContext

java - hibernate : Column count doesn't match value count at row 1

java - 如果用户单击 IE 或 websphere Portal 上的 mozilla 中的新选项卡,如何启动新 session ?

java - 如何在 Scene2D libGDX 中更改屏幕

java - Log4j DailyRollingFileAppender 和 RollingFileAppender 的组合

mysql - 排序字母数字值mysql

mysql - 将一列设置值转换为 MySQL 中的一列单个值

java - Spring MVC 在每个请求之前检查 session