SpringMVC+MyBatis构建JavaWEB项目长时间空置后执行数据库操作报错

MySQl的默认连接时长为8个小时,如果超过8个小时连接而没有对数据库的操作的话就会断开,此时再访问会报错

java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
...

这个问题在不同的MySQL版本可以有着不同的解决方案
例如在MySQL5之前可以在数据库连接的url中加入“autoReconnect=true”(这仅对mysql5之前有作用)也可以更改MySQL的配置文件将默认的8个小时更改为更长的时间,这里不再介绍

在这里介绍使用MyBatis+C3P0数据库连接池来解决这个问题

首先在pom.xml中引入C3P0


      com.mchange
      c3p0
      0.9.5.4
    

更改MyBatis的配置文件

    
        
            
            
                
                
                
                

                

                

                

                

            
        
    

image.png
注意MyBatis配置文件中的dataSource(数据源)属性的设置为下面的类文件

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;

/**
 * 创建C3P0与MyBatis兼容的数据源工厂类
 */
public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {
    public C3P0DataSourceFactory() {
        this.dataSource = new ComboPooledDataSource();
    }
}

至此,就解决了MyBatis连接数据库超过8小时自动断开的问题

你可能感兴趣的