spring boot 1.X数据库连接超时问题解决方案

使用spring boot 1.5 线程池连接MySQL时,mysql数据库wait_timeout 为8个小时,这样子程序一晚上没有数据库操作后,连接会断开。第二天访问接口会出错。出现这种问题得原因是1.x默认数据库连接池中的数据库连永不超时,而mysql超时时间为8个小时,这样就会导致很多闲置的连接其实已经断开了。

解决方案有两种:

1.修改mysql的超时时间为永不超时,具体方案 自行百度。

2.设置spring boot DataSource 属性(重点介绍)

查看源码DataSourceConfiguration.class(spring-boot-autoconfigure包中)发现spring boot 1.X 默认采用tomcat连接池(官方文档实锤,2.X 更改为HikariCP,故需要对tomcat 连接池进行配置,

源码如下,

/**
 * Tomcat Pool DataSource configuration.
 */
@ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource", matchIfMissing = true)
static class Tomcat {

   @Bean
   @ConfigurationProperties(prefix = "spring.datasource.tomcat")
   public org.apache.tomcat.jdbc.pool.DataSource dataSource(
         DataSourceProperties properties) {
      org.apache.tomcat.jdbc.pool.DataSource dataSource = createDataSource(
            properties, org.apache.tomcat.jdbc.pool.DataSource.class);
      DatabaseDriver databaseDriver = DatabaseDriver
            .fromJdbcUrl(properties.determineUrl());
      String validationQuery = databaseDriver.getValidationQuery();
      if (validationQuery != null) {
         dataSource.setTestOnBorrow(true);
         dataSource.setValidationQuery(validationQuery);
      }
      return dataSource;
   }

}

 

故此问题解决方案如下:

在配置文件中增加tomcat数据源的配置

spring.datasource.tomcat.initial-size=10
#最大空闲连接
spring.datasource.tomcat.max-idle=20
#最小空闲连接
spring.datasource.tomcat.min-idle=5
#最大连接数量
spring.datasource.tomcat.max-active=50
#是否在自动回收超时连接的时候打印连接的超时错误
spring.datasource.tomcat.log-abandoned=true
#是否自动回收超时连接
spring.datasource.tomcat.remove-abandoned=true
#超时时间(以秒数为单位)
spring.datasource.tomcat.remove-abandoned-timeout=180
##
spring.datasource.tomcat.max-wait=1000
spring.datasource.tomcat.test-while-idle=true
#检测数据库的查询语句
spring.datasource.tomcat.validation-query=select 1
spring.datasource.tomcat.test-on-borrow=true
#每隔五分钟检测空闲超过10分钟的连接
spring.datasource.tomcat.min-evictable-idle-time-millis=600000
spring.datasource.tomcat.time-between-eviction-runs-millis=300000

 

这里注意,网上很多解决方案前缀为spring.datasource的配置是不生效的。

你可能感兴趣的:(spring boot 1.X数据库连接超时问题解决方案)