MyBatis常见面试题2:数据库链接中断如何处理?
题目:我们知道,数据库的访问底层是通过tcp实现的,如果数据库链接中断,那么应用程序是不知道的,是探测不出的,那么程序会卡住,一直在等待,会等待吓人的几十分钟,这种情况会把人郁闷死,真不如及时来个弹框,告诉用户系统暂时无法使用,让用户离开呢。所以,面对数据库连接中断的异常,该怎么设置mybatis呢?
答案:要想吃透这个问题,要明白链接中断产生的原因。这里面会涉及到网络通信的问题。在数据库链接中,connection操作可不是计算1+1这样的形式,它低层是个循环处理过程,既然是循环处理过程那么自然就跟时间扯上关系了,跟时间有关的设置有:max_idle_time,connect_timeout。max_idle_time表明最大的空闲时间,超过这个时间socket就会关闭,这样操作系统会省心省力一些,毕竟操作系统维持一个socket也是花费不少精力的。connect_timeout表明链接的超时时间,我们知道,网络环境就是跟潮水一样,一波一波的,总是在波动,既是数据库服务器活的杠杠的,但是因为网络用塞,客户端仍然连不上服务器端,这个时候就要设置timeout,别一直傻等着。
那么如何设置timeout呢?是设置的mybatis这一层,还是其他数据源这一层!刚找了一下资料:
在mybatis配置文件的settings节点中,增加如下配置
以秒为单位的全局sql超时时间设置,当超出了设置的超时时间时,会抛出SQLTimeoutException。
是否是这样呢?