使用JDBC-MySQL驱动程序(V5.1.3和UP),可以通过用/* ping */前缀发布“轻量级”Ping而不是提供的SQL语句。
例如:/* ping */ SELECT 1
我试图配置myBatis来使用它,但它不起作用。我可以通过使用xRebel(分析工具)或用一个非常慢的语句交换SELECT 1来确认原始SQL正在运行,而不是轻量级ping。
有人知道为什么,或者如何解决这个问题吗?
从我的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”):
https://mybatis.github.io/mybatis-3/configuration.html

最佳答案

您可能已经解决了这个问题,但还需要设置poolPingConnectionsNotUsedFor。默认值为0,即使使用poolPingEnabled它也不会在没有时间(以毫秒为单位)的情况下ping。
您链接的引用提到它,但不明显的是,默认值0表示它不会执行ping操作:/

07-26 04:15