以下是配置详细信息:

<property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.Oracle9iDialect
    </prop>
    <prop key="hibernate.show_sql">false</prop>
    <prop key="hibernate.cache.provider_class">
     org.hibernate.cache.OSCacheProvider
    </prop>
    <prop key="hibernate.cache.use_second_level_cache">
     true
    </prop>
    <!-- <prop key="hibernate.hbm2ddl.auto">update</prop>-->
    <!-- HIBERNATE CONNECTION POOLING!!-->
    <prop key="c3p0.acquire_increment">5</prop>
    <prop key="c3p0.idle_test_period">100</prop>
    <!-- seconds -->    
    <prop key="c3p0.max_statements">5</prop>
    <prop key="c3p0.min_size">15</prop>
                            <prop key="c3p0.max_size">100</prop> 
    <prop key="c3p0.timeout">100</prop>
    <!-- seconds -->
   </props>
  </property>

我们的应用程序是通过 Spring 和 Hibernate 开发的。

一旦我们启动应用程序并点击它,它就会打开 140 个连接并且不会释放它。

我们的 DAO 看起来像这样:

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
...
public class ActionDAO extends HibernateDaoSupport implements IActionDAO {
 public Action findById(ActionPK actionPK) {
  return (Action) getHibernateTemplate().get(Action.class, actionPK);
 }

 public void add(Action action) {
  getHibernateTemplate().save(action);
 }
}
有帮助吗?

解决方案

我们也有类似的问题,前一段时间,而根本原因是,应用程序终止之前的Hibernate会话工厂没有关闭。虽然我明白,您使用的春天,这是为了照顾这自动的,它仍然可能是值得一试。

其他提示

是你的会话事务的一部分?如果是这样,那么会话/关闭连接可能只在事务结束时发生,如果没有发生,你会得到泄漏的连接。

在org.hibernate.jdbc和org.hibernate.transaction启用调试日志记录可以帮助...也看的HibernateTemplate类(使用的HibernateDaoSupport),并请参阅创建会话/关闭是如何配置的选项。你可能只是想换一个Spring的事务包装或类似的东西在里面你的DAO对象。

我不认为你的C3P0设置被击中,看到你>百分贝连接。这就是说,你应该将idle_test_period设置为小于C3P0超时值。

此外,其中休眠事项在确定为什么不被使用C3P0版本。

您还提到弹簧;你需要看到你关于交易做什么。你有某种服务或东西是或者你的情况,是不是你的包装使用DAO事务中?

如果u的使用弹簧的自动装配和的HibernateTemplate

请确保你没有创建的HibernateTemplate的多个实例,即

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
Object o=context.getBean("hibernateTemplate");

在对象o在某处缓存并返回当你的应用程序代码是要求的HibernateTemplate实例。

由于

删除分钟尺寸并尝试:c3p0.min_size

我有类似的问题 Jboss-hibernate. 。我们的印象是,在表演时 在事务会话下操作,不需要提交事务。然而我们意识到这笔交易 必须 尽管这只是一个承诺 操作(如果您已开始交易)。一旦我们在各处提交了交易,泄漏就消失了。

有错误的代码是这样的:

  1. 开始交易
  2. 执行读操作
  3. 关闭会话

上面的程序被替换为以下程序,泄漏消失了。

  1. 开始交易
  2. 执行读操作
  3. 提交交易
  4. 关闭会话
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top