多数据源配置后数据库闲置超时连接失败,需支持8小时后正常插入
解决多数据源下数据库闲置超时无法插入的问题
这个错误的核心原因是:数据库服务器会主动关闭长时间闲置的连接(你的场景是2小时),但连接池没察觉到连接已经失效,当应用再次尝试用这个失效连接时,就会抛出无法创建连接的报错。要实现闲置8小时仍能正常插入,关键是让连接池主动管理连接的有效性,及时剔除失效连接、生成新连接。
针对主流连接池的配置调整
1. HikariCP(Spring Boot默认连接池)
给每个数据源单独配置以下参数,确保连接池在数据库关闭连接前主动回收或验证连接:
max-lifetime: 设置连接的最大生命周期,必须小于数据库的闲置超时时间(比如数据库要设8小时超时,这里就设28000000毫秒,约7小时47分)validation-timeout: 连接验证的超时时间,推荐设5000毫秒(5秒)connection-test-query: 验证连接有效性的SQL,MySQL用SELECT 1,Oracle用SELECT 1 FROM DUALidle-timeout: 闲置连接的超时回收时间,建议比数据库超时短,比如27000000毫秒(7.5小时)
示例YAML配置(假设两个数据源ds1、ds2):
spring: datasource: ds1: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://xxx:3306/db1?useSSL=false&serverTimezone=UTC username: root password: xxx hikari: max-lifetime: 28000000 validation-timeout: 5000 connection-test-query: SELECT 1 idle-timeout: 27000000 ds2: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://xxx:3306/db2?useSSL=false&serverTimezone=UTC username: root password: xxx hikari: max-lifetime: 28000000 validation-timeout: 5000 connection-test-query: SELECT 1 idle-timeout: 27000000
2. Druid连接池
配置以下参数,让连接池定期检查并回收失效连接:
remove-abandoned-timeout-millis: 闲置超过该时间的连接强制回收,设为27000000毫秒(7.5小时)test-while-idle: 开启闲置时自动验证连接有效性test-on-borrow: 获取连接时先验证是否有效validation-query: 验证用的SQL,比如SELECT 1time-between-eviction-runs-millis: 定期检查闲置连接的间隔,推荐300000毫秒(5分钟)
示例YAML配置:
spring: datasource: ds1: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://xxx:3306/db1?useSSL=false&serverTimezone=UTC username: root password: xxx druid: remove-abandoned-timeout-millis: 27000000 test-while-idle: true test-on-borrow: true validation-query: SELECT 1 time-between-eviction-runs-millis: 300000
多数据源额外注意事项
- 每个数据源必须单独配置上述参数,不能共用,避免不同数据库的超时规则冲突
- 如果是自定义代码创建数据源(而非Spring Boot自动配置),要在构建
DataSourceBean时手动设置这些连接池属性,比如HikariCP要通过HikariConfig的setter方法逐一配置 - 检查数据库端的超时设置:比如MySQL的
wait_timeout和interactive_timeout,要确保它们的值设为28800秒(8小时),这样数据库不会在8小时内主动关闭闲置连接,和连接池配置形成双重保障
验证方式
修改配置后重启应用,模拟8小时闲置(可以手动让应用停8小时,或者用工具让连接保持闲置),之后执行插入操作,确认是否能正常完成。
内容的提问来源于stack exchange,提问作者Hang Mao
相关产品推荐
相关产品推荐

