以mysql数据库为例,为避免无效连接长时间占用资源,一般超过一定时间不操作就会断开连接,利用:show global variables like ‘wait_timeout’可查看等待时间。网络普遍的说法是使用autoReconnect=true,但是试过结果无效,或许是版本迭代未维护吧,此时连接是断开而不是关闭。
虽然当下myBatis等框架已经解决了这个问题,但是难免有追寻本源的时候。
下文提供有效解决这种问题的方案:
//略去异常解决
public class AutoReconnect{
//维护的链接
private static Connection conn;
//需要此链接的Service
private static finally ConnService service=new ConnService();
static{
//自动续约方法;
autoReconnect();
}
private static void autoReconect(){
//一个工具线程,用来访问数据库续约
Runnable runnable=()->{
while(true){
通过此链接访问数据的一种方法,或实用,或轻量
();
//休眠时间:及每隔多久访问续约,此处为四小时
(1000*60*60*4);
}
}
Thread thread=new Thread(runable);
();
}
public Connection getConnection(){
//获取连接代码
}
}