使用 JDBC MySQL 驱动程序(v5.1.3 及更高版本),可以通过以 /* ping */
为前缀发出“轻量级”ping 而不是提供的 SQL 语句。
例如:/* ping */SELECT 1
我正在尝试配置 myBatis 来使用它,但它不起作用。我可以通过使用 xRebel(分析工具)或通过将 SELECT 1
替换为非常慢的语句来确认原始 SQL 正在运行而不是轻量级 ping。
有谁知道为什么,或者如何解决这个问题?
来 self 的 myBatisMapperConfig.xml 副本
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="${db.dev.url}" />
<property name="username" value="${db.dev.username}" />
<property name="password" value="${db.dev.password}" />
<property name="poolPingQuery" value="/* ping */ SELECT 1" />
<property name="poolPingEnabled" value="true" />
<property name="poolMaximumActiveConnections" value="50" />
<property name="poolMaximumIdleConnections" value="5" />
<property name="poolMaximumCheckoutTime" value="10000" />
</dataSource>
</environment>
解释轻量级 ping 的引用资料:
- http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-j2ee-concepts-connection-pooling.html
- MySQL connection validity test in datasource : SELECT 1 or something better?
在 myBatis 中解释 ping 连接的引用资料(搜索“poolPingQuery”):
最佳答案
您可能已经想到了这一点,但您还需要设置 poolPingConnectionsNotUsedFor
。默认值为 0,即使使用 poolPingEnabled
,它也不会在没有时间(以毫秒为单位)的情况下执行 ping。
您链接的引用文献提到了它,但默认值 0 意味着它不会执行 ping 并不明显:/
关于mysql - 配置 MyBatis 使用轻量级 MySQL ping/* ping */,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30160871/