在以下两个条件下1,需要设置testonborrow=false提升性能 2, 只设置testWhileIdle=true,timeBetweenEvictionRunsMillis=9000ms 由于并发高连接池内连接一直是活跃的,这种配置下数据源一旦断开,失效的连接一直不能剔除。请问一下这种高并发的情况下,如何设置为让连接池知道数据库已经断开了,并且自动测试连接查询?
原提问者GitHub用户YuechaoYan
在高并发环境下,对Druid数据源配置有以下几点建议:
设置testOnBorrow为false来提升性能
高并发 situation 下,应避免在 每次 borrow 连接时 测试连接,这会影响性能。
设置testWhileIdle为true,并合理配置timeBetweenEvictionRunsMillis
当连接空闲时,轮询测试连接的有效性。可以设置 timeBetweenEvictionRunsMillis为1分钟左右,找个适当的间隔。
增加removeAbandoned属性
设置合理的removeAbandonedTimeout来移除空闲但实际已失效的连接。
合理配置maxIdle和maxActive
根据实际情况配置一个足够多的空闲连接池和最大连接量,提供足够的可用连接。
监控Druid监控指标
监控active connections、idle connections、wait threads等指标,及时发现异常。
综上:
关闭testOnBorrow以提升性能
开启testWhileIdle来在空闲时测试连接
配置removeAbandoned来移除过期空闲连接
合理配置连接池大小和最大连接量
监控Druid状态指标来发现问题
这5点可以让数据源在高并发情况下:
提升性能
知道已失效连接
自动废弃失效连接
提供足够可用连接
通过监控发现异常
设置testOnBorrow为true:这会在从连接池中获取连接时测试连接的可用性。当连接被归还到连接池时,连接池会自动测试连接的可用性。这样可以确保获取到的连接是有效的。
后来通过配置keepAlive=true 另外配置minEvictableIdleTimeMillis=一个非常小的数值,从而来剔除连接池内的坏连接。
原回答者GitHub用户YuechaoYan
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。