You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动