我目前有一个长时间运行的线程,它使用hibernate会话来执行许多更新。我们目前将c3p0连接超时设置为20分钟,并且由于我们正在执行的更新次数,它有时会超时。
我的解决方案是通过关闭会话(我们以这种方式配置hibernate)定期返回到池的连接并获得一个新的。不希望超时超时,因为整个应用程序使用相同的池。
问题是我不知道何时返回到池的连接,因为我不知道连接的超时是什么。我知道我们的属性文件中的当前设置是什么,但是这可以在我不知情的情况下随时更改,因此它很脆弱。有一个计数器并根据我执行的更新次数返回连接并不理想,但可能是我的最后选择。
我有一个hibernate会话,如何检索支持会话的jdbc连接的连接超时?使用SessionFactory和SessionFactoryImpl类是完全可以接受的。
答案 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中的属性
因此,您可以获得所需的任何属性值。