0

我正在将Hibernate 4 与 BoneCP集成,并想了解这些属性的含义:

<property name="idleConnectionTestPeriod">30</property>
<property name="idleMaxAge">240</property>
<property name="connectionTestStatement">select 1 from db.table limit 1</property>

我的应用程序需要保持与 mysqldb 24x7 的持续连接

这是否意味着每 30 分钟执行一次测试语句?并且该连接会在 240 分钟后失效?我如何使我的连接永久化,因为有时我会使用这种配置

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
4

1 回答 1

3

正如 BoneCP 的作者在这里所写,有 2 种方法可以管理连接状态 - 您使用的方式和设置 maxConnectionAgeInSeconds 的方式。

重要提示 - 不要忘记 MySQL 配置,例如 wait_timeout。它以秒为单位,并且必须大于 maxConnectionAgeInSeconds。您可以在 MySQL 目录中的 my.ini 文件中更改此参数。

比如我现在的配置:
wait_timeout=3600(MySQL参数);
maxConnectionAgeInSeconds=3000(BoneCP 参数)

另外,我将interactive_timeout 变量设置为与wait_timeout 相同。我不确定这是否有意义,但我在某个地方看到 MySQL 需要 min(interactive_timeout,wait_timeout)。实际上,interactive_timeout 是交互式客户端的超时时间 - 当您使用 MySQL 命令行时,您就是交互式客户端。无论如何,最好让它们相等 - 即使这个参数没有意义,它就像保险一样。

PS不要忘记在设置变量之前关闭mysql(cmd->net stop mysql)。设置新值后,使用命令行在命令行中检查它们show variables like '%timeout%';

于 2013-06-10T03:15:41.233 回答