JDBC连接断开,autoReconnect=true失效解决方案:做一个合格的回头客!

时间:2025-02-19 08:27:21

以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(){
//获取连接代码
}

}