【问题标题】:How can I find the jdbc connection timeout of a hibernate session如何找到休眠会话的 jdbc 连接超时
【发布时间】:2011-05-29 11:49:59
【问题描述】:

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

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

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

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

【问题讨论】:

  • 现在我将采用所描述的计数器方法。我暂时保留这个问题,如果有一段时间,我会自己回答。
  • 所以你想在不读取属性文件的情况下获得c3p0连接超时,如果我错了请指出
  • 没错,但如果我能提供帮助的话,我真的不想将自己束缚在特定的连接池实现中。

标签: hibernate jdbc


【解决方案1】:

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

HibernateServiceMBean 包含多个用于 Hibernate 配置属性的方法,例如数据源、事务策略、缓存、方言等。

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

【讨论】:

    【解决方案2】:

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

    导入 org.hibernate.cfg.Configuration;

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

    所以你可以得到任何你想要的属性值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2012-03-31
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多