关于连接池参数testWhileIdle,testOnBorrow,testOnReturn的疑问-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

落地花开啦 2016-06-02 17:39:33 10589

我想知道这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连接~
druid Java 关系型数据库 MySQL 应用服务中间件 数据库连接 数据库 微服务
分享到
取消 提交回答
全部回答(1)
  • 落地花开啦
    2019-07-17 19:25:24
    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.
    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题