dbcp基本配置和重连配置


2. dbcp的基本配置
相关配置说明:
2. dbcp开发云主机域名实现的pool从池管理操作
这里贴了一个相关validate代码,具体类可见:PoolableConnectionFactory.validateConnection()3.
pool池的evict调用代码:GenericObjectPool (apache commons pool version
1.5.4)注意:
目前dbcp的pool的实现是使用了公用的apache common
pools进行扩展处理,所以和原生的连接池处理,代码看上去有点别扭,感觉自动重连这块异常处理不怎么好,我也就只重点关注了这部分代码而已.相关场景:测试需求1步骤测试需求2步骤/sbin/iptables -A INPUT -s
10.16.2.69 -j REJECT
/sbin/iptables -A FORWARD -p tcp -s 10.16.2.69 –dport 3306 -m
state –state NEW,ESTABLISHED -j DROP

5. iptables -F 清空规则,恢复链接通道。测试需求问题记录
分别测试了两种配置,有validateObject的配置和没有validateObject的相关配置。1. 没有validate配置
问题一: 异常重启mysql数据库后,居然也可以自动恢复链接,sql查询正常
跟踪了一下代码,发现这么一个问题:解释:
问题二:validateObject调用时,dbcp设置的validationQueryTimeout居然没效果
看了mysql
statement代码实现,找到了答案。mysql com.mysql.jdbc.statemen
部分代码timeout时间处理:
对应的CancelTask的代码:原因总结一句话:
queryTimeout的实现是通过底层数据库提供的机制,比如KILL QUERY pid.
如果此时的网络不通,出现阻塞现象,对应的kill命令也发不出去,所以timeout设置的超时没效果。

最后还是决定配置testWhileIdle扫描,主要考虑:
——————————————–新加的内容:
以前使用jboss的jndi数据源的方式,是通过配置oracle-ds.xml,可以设置EncryptDBPassword,引用jboss
login-config.xml配置的加密配置。为了能达到同样的效果,切换为spring
dbcp配置时,也有类似密码加密的功能,运行期进行密码decode,最后进行数据链接。
实现方式很简单,分析jboss的对应SecureIdentityLoginModule的实现,无非就是走了Blowfish加密算法,自己拷贝实现一份。最后的配置替换为:
——————————————–新加的内容:常见的问题:
1.
数据库意外重启后,原先的数据库连接池能自动废弃老的无用的链接,建立新的数据库链接
2.
网络异常中断后,原先的建立的tcp链接,应该能进行自动切换。比如网站演习中的交换机重启会导致网络瞬断
3.
分布式数据库中间件,比如amoeba会定时的将空闲链接异常关闭,客户端会出现半开的空闲链接。大致的解决思路:

1.sql心跳检查主动式
,即我前面提到的sql validate相关配置2.请求探雷
牺牲小我,完成大我的精神。拿链接尝试一下,发现处理失败丢弃链接,探雷的请求总会失败几个,就是前面遇到的问题一,dbcp已经支持该功能,不需要额外置。
3.设置合理的超时时间,
解决半开链接.一般数据库mysql,oracle都有一定的链接空闲断开的机制,而且当你使用一些分布式中间件(软件一类的),空闲链接控制会更加严格,这时候设置合理的超时时间可以有效避免半开链接。
一般超时时间,dbcp主要是minEvictableIdleTimeMillis(空闲链接)
, removeAbandonedTimeout(链接泄漏)。可以见前面的参数解释。

相关推荐: 【超简单】MySQL存储引擎的选择与配置

MySQL中的数据用各种不同的技术存储在文件(或内存)中。每一种技术都使用不同的存储机构,索引技巧,锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。这些不同的技术以及配套的相关功能在MySQL…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/05 12:51
下一篇 06/05 12:51

相关推荐