【问题标题】:SORM vs MySQL idle connectionSORM vs MySQL 空闲连接
【发布时间】:2014-01-16 07:04:14
【问题描述】:

我正在使用 Play Framework 2.2.1MySQL 5.5sorm 0.3.10

由于 MySQL 在指定的空闲超时后断开非活动连接,我的应用程序中出现了这个异常:

[CommunicationsException: Communications link failure The last packet successfully received from the server was 162 701 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.]

据我了解,sorm 使用的是 c3p0 连接池。是否可以以某种方式配置 c3p0 或 sorm 以指定延迟踢 mysql 或在连接断开后自动重新连接?

【问题讨论】:

    标签: mysql jdbc playframework c3p0 sorm


    【解决方案1】:

    SORM 的0.3.13-SNAPSHOTInstance 引入了timeout 参数,默认设置为30。此设置确定允许底层连接空闲的秒数。当达到超时时,一种“keepalive”请求被发送到数据库并重置计时器。当进行任何正常查询时,计时器也会重置。该实现仅依赖于 C3P0 的idleConnectionTestPeriod

    如需进一步讨论、建议和报告,请访问the associated ticket on the issue tracker 或打开另一个。如果the associated ticket 中没有任何投诉,此更改将使其进入 0.3.13 版本。

    【讨论】:

      【解决方案2】:

      用 c3p0 很容易解决这个问题,但我会仔细检查你是否在使用它。 BoneCP 是默认的 play2 连接池。用 BoneCP 也很容易解决这个问题!

      在 c3p0 中,配置参数 maxIdleTimemaxConnectionAge 或(更好)连接测试机制会有所帮助。见http://www.mchange.com/projects/c3p0/#configuring_connection_testing

      如果你想在 play2 中使用 c3p0,请参阅https://github.com/swaldman/c3p0-play

      【讨论】:

      • 嗯,sorm 依赖于 c3p0,如果它会与 play 插件冲突,我不会感到惊讶。
      • 如果您想查看 c3p0 是否真的是您的应用程序使用的池,请在日志文件中查找池初始化时池配置的转储(或者让您的 VM 转储线程,并查找c3p0 相关的线程,或者使用 JMX 查看是否有任何 c3p0 池在使用中)。
      • Sorm 内部使用 c3p0。
      • 那么有可能以某种方式进行配置吗?
      • @SergeyLiar 我已经在问题跟踪器上打开了related ticket,其中包含有关可能解决方法的信息。我们应该在那里继续讨论。
      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2020-04-29
      • 2014-12-04
      • 2014-04-29
      • 2011-09-16
      相关资源
      最近更新 更多