2010-12-22 68 views
1

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

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

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

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

+0

现在我要用所描述的柜台方法。我现在将把问题留给公众,如果它开放了一段时间,我会自己回答。 – StevenWilkins 2010-12-22 18:04:39

回答

1

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

的HibernateServiceMBean包含像数据源,事务策略,缓存,方言等

org.hibernate.cfg.Environment.C3P0_TIMEOUT Hibernate配置属性的几种方法是指示用于C3P0连接池最大空闲时间。

0

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

import org.hibernate.cfg.Configuration;

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

所以你可以获得任何你想要的财产价值。