开发者社区> 问答> 正文

关于连接池参数testWhileIdle,testOnBorrow,testOnReturn的疑问

我想知道这3个参数如何配置比较好。
目前我们使用微服务框架Dropwizard进行server端接口的开发,该框架使用的是tomcat jdbc pool8,数据库是Mysql5.6
之前出现过如下错误:
The last packet successfully received from the server was 30,303 millisecond
我们对于mysql的配置如下:

max_connections=1000
wait_timeout=30
interactive_timeout=30

tomcat jdbc pool配置为:

minSize: 10
maxSize: 100
checkConnectionOnBorrow: true
checkConnectionOnConnect: true
checkConnectionOnReturn: true
checkConnectionWhileIdle: true

把几个参数都设置为true,貌似是解决了这个问题,然后我查看Druid的github文档
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE
发现druid的推荐配置为:

<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
  1. 请问为什么druid设置testOnBorrow和testOnReturn为false呢, 如果从pool中获取(borrow)一个失效的连接怎么办??
  2. 启用testOnBorrow以及testWhileIdle后,是不是testOnReturn也就可以设置为false了??
  3. dropwizard中为什么必须把这几个参数都设置为true才能解决问题??
  4. my.cnf中我这么配置没问题吧?网上好多说要把timeout设置为1年,我认为不太对,因为会出现大量sleep连接~

展开
收起
落地花开啦 2016-06-02 17:39:33 19210 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人
    1. testOnBorrow和testOnReturn在生产环境一般是不开启的,主要是性能考虑。失效连接主要通过testWhileIdle保证,如果获取到了不可用的数据库连接,一般由应用处理异常。
    2. 对于常规的数据库连接池,testOnBorrow等配置参数的含义和最佳实践可以参考官方文档。
    3. 数据源库连接池的实现原理与dropwizard无关,既然mysql server的wait_timeout等参数被设置为30秒,那么就会主动关闭不活跃的客户端连接,几个test参数设置为true可以通过充分的检测移除不可用连接,并重新创建新的连接,保证应用都获取到健康的连接。
    4. my.conf中的wait_timeout参数和interactive_timeout参数默认是28800秒,也就是8小时。一般在生产环境这个数值会被设置为7天甚至30天,目的是保证mysql不会因为流量稀少而主动关闭session.
    2019-07-17 19:25:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载