Hibernate 休眠不释放数据库连接

Hibernate 休眠不释放数据库连接,hibernate,connection-pooling,oracle9i,Hibernate,Connection Pooling,Oracle9i,以下是配置详细信息: <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle9iDialect </prop> <prop key="hibernate.show_sql">false</prop> <prop key

以下是配置详细信息:

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

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


在org.hibernate.jdbc和org.hibernate.transaction上启用调试日志可能会有帮助。。。另外,请查看HibernateTemplate类(HibernateDataSupport使用该类),并查看会话创建/关闭的配置选项。您可能只想将DAO对象包装在Spring事务包装器或类似的东西中。

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


在org.hibernate.jdbc和org.hibernate.transaction上启用调试日志可能会有帮助。。。另外,请查看HibernateTemplate类(HibernateDataSupport使用该类),并查看会话创建/关闭的配置选项。您可能只想将DAO对象包装在Spring事务包装器或类似的东西中。

我认为您的c3p0设置没有受到影响,因为您有>100 db的连接。也就是说,您应该将空闲测试周期设置为小于c3p0超时的值

此外,在确定为什么不使用c3p0时,哪个版本的hibernate很重要


你还提到春天,;你需要了解你在交易方面做了什么。您是否有某种服务或其他东西没有在事务中包装您的DAO使用?

我认为您的c3p0设置没有受到影响,因为您有>100 db的连接。也就是说,您应该将空闲测试周期设置为小于c3p0超时的值

此外,在确定为什么不使用c3p0时,哪个版本的hibernate很重要


你还提到春天,;你需要了解你在交易方面做了什么。您是否有某种服务或其他东西没有在事务中包装您的DAO使用?

不久前,我们遇到了类似的问题,根本原因是Hibernate会话工厂在应用程序终止之前没有关闭。虽然我知道您使用的是Spring,它应该自动处理此问题,但它可能值得检查。

不久前我们遇到了类似问题,根本原因是Hibernate会话工厂在应用程序终止之前没有关闭。虽然我知道您使用的是Spring,它应该自动处理这个问题,但还是值得检查。

如果您使用的是Spring自动布线和hibernateTemplate

请确保创建的HibernateTemplate实例不超过一个,即

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
Object o=context.getBean("hibernateTemplate");
对象
o
必须缓存在某个地方,并在应用程序代码请求hibernatetemplate实例时返回


如果您使用的是spring自动布线和hibernateTemplate,请感谢

请确保创建的HibernateTemplate实例不超过一个,即

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");
Object o=context.getBean("hibernateTemplate");
对象
o
必须缓存在某个地方,并在应用程序代码请求hibernatetemplate实例时返回


谢谢

删除最小大小并尝试:c3p0.min\u size

删除最小大小并尝试:c3p0.min\u size

我在Jboss hibernate中遇到了类似的问题。我们的印象是,在事务会话下执行读取操作时,不需要提交事务。然而,我们意识到,交易必须提交,尽管它只是一个读取操作(如果您已开始交易)。一旦我们在任何地方进行交易,泄漏就消失了

错误代码如下所示:

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);
 }
}
  • 开始交易
  • 执行读操作
  • 结束会议
  • 用以下程序替换上述内容,泄漏消失

  • 开始交易
  • 执行读取操作
  • 提交事务
  • 结束会议

  • 我在Jboss hibernate中遇到了类似的问题。我们的印象是,在事务会话下执行读取操作时,不需要提交事务。然而,我们意识到,交易必须提交,尽管它只是一个读取操作(如果您已开始交易)。一旦我们在任何地方进行交易,泄漏就消失了

    错误代码如下所示:

    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);
     }
    }
    
  • 开始交易
  • 执行读操作
  • 结束会议
  • 用以下程序替换上述内容,泄漏消失

  • 开始交易
  • 执行读取操作
  • 提交事务
  • 结束会议

  • 我们在项目早期也面临同样的情况。经过一周的谷歌搜索和大量论坛发帖,我们无法解决这个问题。出于测试目的,我们将二级缓存设置为false,系统正常工作。我们的项目中使用了Ehcache。我试图找出这个问题,但它仍然困扰着我。试一试,可能会有用。Hibernate的版本是什么?我们在项目早期面临同样的情况。经过一周的谷歌搜索和大量论坛发帖,我们无法解决这个问题。出于测试目的,我们将二级缓存设置为false,系统正常工作。我们的项目中使用了Ehcache。我试图找出这个问题,但它仍然困扰着我。试试看,可能会有用。Hibernate的版本是什么?在这个博客中有很好的解释。会话由HibernateTransactionManager管理。当遇到方法上的注释时,将创建一个新会话,该会话在方法执行后自动关闭。现在,如果