如何使用 EclipseLink 重新连接丢失的连接?

Posted

技术标签:

【中文标题】如何使用 EclipseLink 重新连接丢失的连接?【英文标题】:How to reconnect lost connections with EclipseLink? 【发布时间】:2014-06-24 21:48:33 【问题描述】:

如果 mysql Server 在 500 秒“睡眠时间”后终止会话,我会遇到问题,即下一个请求不成功。如果 mySQL Server 没有关闭休眠连接,则可能在 700 秒后出现同样的问题。

我能做什么? 遵循我的 persistence.xml 的属性

<property name="eclipselink.query-results-cache" value="false" />
<property name="eclipselink.cache.size.default" value="0" />
<property name="eclipselink.cache.type.default" value="None" />
<property name="eclipselink.cache.alwaysRefresh.default" value="true" />
<property name="eclipselink.jdbc.read-connections.max" value="10" />
<property name="eclipselink.jdbc.cache-statements" value="true" />
<property name="eclipselink.jdbc.read-connections.shared" value="true" />

如果重要的话,事务类型是 RESOURCE_LOCAL。

【问题讨论】:

好吧,我现在有一个负 1,但我也很高兴能理解我在问题中做错了什么,因为这个问题对我来说真的很重要,我认为你可以阅读问题,这绝对不是 mySQL 的问题。例如,如果我从外部终止连接,mySQL Workbench 没有任何问题。 也有可能我禁用了睡眠连接的杀戮,但就像我之前所说的那样,问题在 700 秒后再次出现。 您的 -1 现在已经消失了 - 您的问题完全有效。似乎有人认为连接池是微不足道的 - 但以下没有一个得到正确回答:***.com/questions/5289075/…***.com/questions/12220860/…***.com/questions/11718381/…***.com/questions/9880365/… 【参考方案1】:

您是如何配置连接池的?如果是服务器数据源,则应在服务器中设置连接测试等属性。有关示例设置,请参阅 http://docs.oracle.com/cd/E21764_01/web.1111/e13737/ds_tuning.htm#i1199711。

如果是 EclipseLink 池,默认情况下它应该在检测到连接失败时自动尝试重试查询。控制行为的属性只能通过特定数据库的 DatabasePlaform 类中的 api 访问,并且可以通过定制器进行设置,如下所述: How To modify Eclipselink JPA 2.0 connection retry behavior

【讨论】:

非常感谢。第二个对我有用。事实证明,我必须手动设置login.setConnectionHealthValidationOnError(true); ,我理解默认情况下应该是这样。

以上是关于如何使用 EclipseLink 重新连接丢失的连接?的主要内容,如果未能解决你的问题,请参考以下文章

当服务器连接丢失时,如何自行停止和重新启动客户端的服务?

如何检查连接是不是丢失

eclipselink 连接池

如何在 EclipseLink 中引用自定义的“ConnectionProvider”?

为啥eclipselink每次重新启动时都会消耗整个allocationSize?

EclipseLink MongoDB 连接