问题描述:
在使用 Spring Boot 集成 Druid 数据库连接池时,连接失败后 Druid 会一直重试连接,但是重试的频率比较低(默认为 1 分钟重连一次),导致数据库宕机或者网络出现波动时,数据源的恢复时间过长,影响了系统的可用性。
解决方法:
为了解决这个问题,可以如下进行配置:
1、设置 testWhileIdle 为 true
在 Druid 数据源的配置中,将 testWhileIdle 设置为 true,这样就可以在连接空闲时检测连接的可用性,以便在连接发生异常时及时重连。
示例代码:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
min-idle: 1
initial-size: 2
max-active: 10
test-while-idle: true
2、设置 validationQueryTimeout
在 Druid 数据源的配置中,设置 validationQueryTimeout 属性,该属性设置检测连接的最长时间,当检测时间超过该值时,即便检测没有完成,连接也会被返回到连接池中进行重用,避免了因为单个连接超时导致整个程序瘫痪的情况。
示例代码:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
min-idle: 1
initial-size: 2
max-active: 10
test-while-idle: true
validation-query-timeout: 5000
关于 validationQueryTimeout 属性,需要注意的是,单位为毫秒,默认为 30 秒。
示例说明:
下面是一个使用 Spring Boot 集成 Druid 数据库连接池的示例项目,其中配置了上述的解决方法,可供参考。
项目代码:https://github.com/freewolf/spring-boot-demo/blob/master/druid-demo/
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot druid数据库连接池连接失败后一直重连的解决方法 - Python技术站