数据库连接失效导致程序异常怎么办—-mybatis数据库连接池配置” 数据库连接失效导致程序异常怎么办—-mybatis数据库连接池配置

我的博客地址:http://www.ypbck.xyz    http://118.24.14.224

 

以mysql为例,数据库连接默认是8小时,也就是说一个连接8小时未使用,就将被关闭,但是如果你使用了数据库连接池技术,当连接被关闭之后,程序并不知道这是一个失效的连接,依然进行使用,就会导致程序出错。怎么办呢?

1.修改mysql的默认时间,可以最大改为一年。(但是不推荐,这样缺乏可移植性,若是文档不全的话,服务器做了迁移,运维都不知到怎么搞了)

2.连接池在分配连接给请求时,先检查连接的有效性,无效就丢弃重新获取。

那么,连接池如何配置呢?连参数丢不知道,百度一下 《mybatis数据库连接池配置》出来的全是垃圾一堆,都是用了第三方连接池,而我们项目小,用mybatis自带的就好了。那么自己去看源码吧,在源码的 org.apache.ibatis包下发现了一个名为datasource的包,不用说,这就是连接池包了,进去,发现有 jndi,pooled,unpooled三个包,而默认的mybatis的conf.xml中就是用的是pooled,因此进去,只有5个类,依次查看源码,在poolState类中找到:

看到什么Driver,name,password是不是很亲切,不就是在conf.xml里面配置的参数么,继续看,还有很多,找到我们想要的关键属性参数:带有ping的三个,就是测试有效性的没错了(你为啥这么肯定?告诉你,这是学计算机的人的直觉),我在官方文档里咋没看到这些参数呢?根据三个参数的名称和类型推断一下他们对应的value是啥,如下图:

又想问我咋知道?举个例子:poolPingEnabled pool是池的意思,ping代表测试,enabled是可不可用,典型的boolean类型,所以该参数的value应该为true or false,看表意:是否进行测试,当然要测试啦,所以填true。后面的一样的道理,带有query的是查询,第三个一看就是时间间隔撒。

好了,这就把自带连接池配置好了,每隔360000秒就会自动去测试连接的有效性。发送一个 select 1 查询语句去测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值