如何找到hibernate会话的jdbc连接超时

时间:2010-12-22 15:46:20

标签: hibernate jdbc

我目前有一个长时间运行的线程,它使用hibernate会话来执行许多更新。我们目前将c3p0连接超时设置为20分钟,并且由于我们正在执行的更新次数,它有时会超时。

我的解决方案是通过关闭会话(我们以这种方式配置hibernate)定期返回到池的连接并获得一个新的。不希望超时超时,因为整个应用程序使用相同的池。

问题是我不知道何时返回到池的连接,因为我不知道连接的超时是什么。我知道我们的属性文件中的当前设置是什么,但是这可以在我不知情的情况下随时更改,因此它很脆弱。有一个计数器并根据我执行的更新次数返回连接并不理想,但可能是我的最后选择。

我有一个hibernate会话,如何检索支持会话的jdbc连接的连接超时?使用SessionFactory和SessionFactoryImpl类是完全可以接受的。

2 个答案:

答案 0 :(得分:1)

HibernateServiceMBean和StatisticsServiceMBean是Hibernate在JMX上下文中提供的MBean。 HibernateService和StatisticsService是这些接口的实现类。

HibernateServiceMBean包含几种Hibernate配置属性的方法,如数据源,事务策略,缓存,方言等。

org.hibernate.cfg.Environment.C3P0_TIMEOUT是指示C3P0连接池的最大空闲时间的属性。

答案 1 :(得分:0)

您无法从SessionFactory或SessionFactoryImpl获取属性。此外,如果你注意使用jmx服务Nayan的答案可能没有用。我的建议,

import org.hibernate.cfg.Configuration;

Configuration.config(); //从hibernate.cfg.xml读取所有属性 属性props = Configuration.getProperties(); //这将返回hibernate.cfg.xml中的属性

因此,您可以获得所需的任何属性值。