Spring Boot 2.0.0.RELEASE中spring-boot-starter-data-jpa自动重连配置方法
Spring Boot 2.0.0.RELEASE 实现数据库自动重连的配置方案
嘿,这个问题我刚好踩过坑,来给你详细说说~
首先得明确:Spring Boot 2.0+ 默认把数据源换成了 HikariCP(性能比旧版的Tomcat JDBC好不少),所以旧版针对Tomcat JDBC的自动重连配置在新版里就不适用了,得换成Hikari的专属配置。
一、默认HikariCP的配置方案
这是最推荐的方式,不用额外换数据源,直接在application.properties里加这些参数就行:
# 基础数据库连接配置(以MySQL为例) spring.datasource.url=jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_db_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # HikariCP 自动重连核心配置 # 测试连接有效性的SQL语句(不同数据库略有差异:MySQL用SELECT 1,Oracle用SELECT 1 FROM DUAL) spring.datasource.hikari.connection-test-query=SELECT 1 # 连接验证超时时间(毫秒,这里设5秒) spring.datasource.hikari.validation-timeout=5000 # 空闲连接在池中保留的最长时间(10分钟) spring.datasource.hikari.idle-timeout=600000 # 连接的最大生命周期(30分钟,防止数据库主动断开后池中留无效连接) spring.datasource.hikari.max-lifetime=1800000 # 可选:连接泄漏检测阈值(2秒,超过这个时间未归还连接会打日志) spring.datasource.hikari.leak-detection-threshold=2000
小提示:
HikariCP能自动识别大部分主流数据库,如果你用的是MySQL、PostgreSQL这类常见库,connection-test-query其实可以省略,它会自动用对应的验证语句,但手动加上更稳妥,尤其是一些小众数据库。
二、如果坚持用旧版Tomcat JDBC数据源
要是你因为某些原因必须用Tomcat JDBC,得先排除默认的HikariCP,再引入Tomcat JDBC依赖,然后配置旧版风格的参数:
1. 排除Hikari并引入Tomcat JDBC(Maven示例)
在pom.xml里修改依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions> <exclusion> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </exclusion> </exclusions> </dependency> <!-- 引入Tomcat JDBC数据源 --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </dependency>
2. 在application.properties配置自动重连
# 基础数据库连接配置不变 spring.datasource.url=jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_db_password # Tomcat JDBC 自动重连配置 # 从池中借连接时验证有效性 spring.datasource.tomcat.test-on-borrow=true # 验证连接的SQL语句 spring.datasource.tomcat.validation-query=SELECT 1 # 验证间隔时间(30秒) spring.datasource.tomcat.validation-interval=30000 # 空闲连接回收线程运行间隔(30秒) spring.datasource.tomcat.time-between-eviction-runs-millis=30000 # 空闲连接最小存活时间(1分钟) spring.datasource.tomcat.min-evictable-idle-time-millis=60000
总结
优先用默认的HikariCP方案,不仅性能更优,配置也更简洁。如果是老项目迁移,再考虑Tomcat JDBC的兼容配置。
内容的提问来源于stack exchange,提问作者jonas.lima




