自带连接池配置的配置如下,明明配置了poolPingConnectionsNotUsedFor校验链接是否正常,还是有时候会报错:
The last packet successfully received from the server was 92,942,346 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago
Cause:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
<!--数据源连接池配置 -->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="poolPingEnabled" value="true"/>
<property name="poolPingQuery" value="select 1"/>
<property name="poolPingConnectionsNotUsedFor" value="3600000"/>
<property name="poolMaximumActiveConnections" value="60"/> <!-- 在任意时间可以存在的活动(也就是正在使用)连接数量,默认值:10 -->
<property name="poolMaximumCheckoutTime" value="5000"/> <!-- 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒) -->
<property name="poolTimeToWait" value="5000"/>
<property name="poolMaximumIdleConnections" value="5"/> <!-- 任意时间可能存在的空闲连接数。 -->
</dataSource>
</environment>
读了几天源码毫无收获,最后的解决方案是弃用mybatis自带的连接池,mybatis直接注册使用第三方数据源DBCP,加上一些缓存框架,就完美解决了。
每次借之前检查一下。顶一下,遇到同样的问题,当连接池执行校验sql是比如select 1。会一直卡在socket.read0()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。