【问题标题】:How to handle stale connections in JPA如何处理 JPA 中的陈旧连接
【发布时间】:2011-12-05 23:29:40
【问题描述】:

在为 JPA EntityManager 提供服务的连接池中可能会出现过时的连接。使用此类连接时会引发 [通用] 异常,但确定连接是否过时(以及是否应重试)的可移植(非供应商特定)方法是什么?

我正在寻找的是 JDBC Connection.isValid() 方法的等价物。

谢谢

【问题讨论】:

  • 通常您使用连接池配置中的“测试查询”来处理此问题。但是,这是特定于供应商的。
  • 通常你的连接池应该处理这个问题。您是否在应用程序中看到此类错误?您使用的是什么连接池,它是如何配置的?
  • 不幸的是,连接池设置为禁用“测试连接”(这超出了我的控制范围),因此我试图围绕它编写代码

标签: java jpa


【解决方案1】:

如果您使用的是 EclipseLink,则使用 E​​clipseLink 的连接池,它会在通信失败时自动检测并重新连接死连接。

如果您使用的是 DataSource,那么您确实需要在 DataSource 中启用连接才能使其正常工作。否则你无法从 DataSource 的池中驱逐一个连接,你可以尝试获取另一个连接,但如果 DataSource 不知道连接已死,它可能会让你或其他线程返回死连接。

【讨论】:

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