我目前有一个长时间运行的线程,它使用一个hibernate会话来执行许多更新 . 我们目前将c3p0连接超时设置为20分钟,并且由于我们正在执行的更新次数,它有时会超时 .
我的解决方案是通过关闭会话(我们以这种方式配置hibernate)定期返回到池的连接并获得一个新的 . 不希望超时超时,因为整个应用程序使用相同的池 .
问题是我不知道何时返回到池的连接,因为我不知道连接的超时是什么 . 我知道我们的属性文件中的当前设置是什么,但是这可以在我不知情的情况下随时更改,因此它很脆弱 . 有一个计数器并根据我执行的更新次数返回连接并不理想,但可能是我的最后选择 .
我有一个hibernate会话,如何检索支持会话的jdbc连接的连接超时?使用SessionFactory和SessionFactoryImpl类是完全可以接受的 .
2 回答
HibernateServiceMBean和StatisticsServiceMBean是Hibernate在JMX上下文中提供的MBean . HibernateService和StatisticsService是这些接口的实现类 .
HibernateServiceMBean包含几种Hibernate配置属性的方法,如数据源,事务策略,缓存,方言等 .
org.hibernate.cfg.Environment.C3P0_TIMEOUT
是指示C3P0连接池的最大空闲时间的属性 .您无法从SessionFactory或SessionFactoryImpl返回属性 . 此外,如果你注意使用jmx服务Nayan的答案可能没有用 . 我的建议,
import org.hibernate.cfg.Configuration;
Configuration.config(); //从hibernate.cfg.xml读取所有属性属性props = Configuration.getProperties(); //这将返回hibernate.cfg.xml中的属性
因此,您可以获得您想要的任何属性值 .