gpt4 book ai didi

java - 达到 max_size 时 c3p0 不释放连接

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:02 26 4
gpt4 key购买 nike

我试图用一种方法对数据库执行 10 次获取。我正在使用 Hibernate 3.5.x 和 Spring 3.2.13 以及 c3p0 0.9.5。

我的 hibernate.cfg.xml 包含以下内容:

<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">300</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.timeout">600</property>

通过 c3p0 的调试,这一切都很好:

[managed: 10, unused: 0, excluded: 0] 
[managed: 10, unused: 1, excluded: 0]
[managed: 10, unused: 2, excluded: 0]
[managed: 10, unused: 3, excluded: 0]
[managed: 10, unused: 4, excluded: 0]
[managed: 10, unused: 5, excluded: 0]
[managed: 10, unused: 6, excluded: 0]
[managed: 10, unused: 7, excluded: 0]
[managed: 10, unused: 8, excluded: 0]
[managed: 10, unused: 9, excluded: 0]

这一切发生得非常快(不到 0.5 秒)

但是如果我添加一个额外的 get,即 11,那么我会得到以下结果:

[managed: 10, unused: 0, excluded: 0] repeatedly

在连接超时之前它不会改变。

我正在像这样使用 Springs 事务管理器:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

并使用以下基本上调用 findOne() 的方法

public abstract class AbstractDAO<T extends Serializable> {
private Class< T > clazz;

@Autowired
private SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

public void setClazz(final Class<T> clazzToSet) {
clazz = clazzToSet;
}

@Transactional
public T findOne(final long id) {
return (T) getCurrentSession().get(clazz, id);
}

...
}

请告诉我还有哪些其他信息可能有助于诊断。

我可能做错了什么?

最佳答案

您正在泄漏连接。

您无法关闭 () 您的连接。 (请在组织的 finally block 中稳健地关闭()它们,以便保证对 close() 的调用——即不能被 finally 中的先前异常跳过——或者如果 Java 7+ 使用 try-with-resources 则更好。

注意:在 Hibernate 中,您必须确保关闭连接的是 Session。

关于java - 达到 max_size 时 c3p0 不释放连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com