首页 文章

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

提问于
浏览
1

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

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

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

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

2 回答

  • 1

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

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

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

  • 0

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

    import org.hibernate.cfg.Configuration;

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

    因此,您可以获得您想要的任何属性值 .

相关问题