3

我正在使用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 或在连接断开后自动重新连接?

4

2 回答 2

2

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

如需进一步讨论、建议和报告,请访问问题跟踪器上的相关票证或打开另一个票证。如果相关票证中没有任何投诉,则此更改将使其进入 0.3.13 版本。

于 2014-01-16T16:51:00.770 回答
1

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

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

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

于 2014-01-16T08:54:45.743 回答