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管理。当遇到方法上的注释时,将创建一个新会话,该会话在方法执行后自动关闭。现在,如果