无法在 Spring Boot 中为 Hikari 设置 keepAlive Time 配置

Posted

技术标签:

【中文标题】无法在 Spring Boot 中为 Hikari 设置 keepAlive Time 配置【英文标题】:Not able to set keepAliveTime config for Hikari in SpringBoot 【发布时间】:2021-12-16 08:49:57 【问题描述】:

我有一个基于 spring-boot 的应用程序连接到 postgres DB。它使用默认的 HikariCP 作为 JDBC 连接池。从文档中我看到我们可以配置一个我认为对我们有用的属性 keepALiveTime 但我无法在我的 yml 文件中设置它。看起来是这样的

datasource:
    jdbc-url: jdbc:postgresql://x.x.x.x:5433/xxx?sslmode=require&sslcert=/file.crt&sslkey=/tmp/file.key
    username: $JDBC_USERNAME
    password: $JDBC_PASSWORD
    keepaliveTime: 80000
    jpa:
      hibernate:
        ddl-auto: update
      show-sql: true
      properties:
        hibernate.format_sql: true
        hibernate.dialect: org.hibernate.dialect.PostgreSQL81Dialect
    hikari:
      idle-timeout: 500000
      minimum-idle: 10
      maximum-pool-size: 15
      keepaliveTime: 80000
      max-lifetime: 48000
      connection-timeout: 180000

所有其他配置都是自动建议的并且可以使用。但是我无法填充 keepAliveTime 选项。虽然我在配置中提供了它,但 Hikari 没有使用它。

【问题讨论】:

您使用哪个版本的HikariCP? seems keepaliveTime 参数是在4.0.0 中添加的 我正在使用 spring boot 2.3.0-RELEASE 版本的“spring-boot-starter-data-jpa”依赖项。不确定它默认使用哪个 Hikari 版本。有没有办法在春季启动中覆盖它 是的,有,但我不推荐。这就是为什么使用 Spring Boot 依赖项,以确保不会遇到不兼容的依赖项版本。 我还是想试试它是否有效。我已经从 jpa implementation('org.springframework.boot:spring-boot-starter-data-jpa') exclude group: 'com.zaxxer', module: 'HikariCP' 中排除了 HikariCP 依赖项,并添加了对 Higher HikariCP 的依赖项-> 'com.zaxxer:HikariCP:4.0.3' 我仍然在我的应用程序中获得 3.4.5 的 HIkariCP。在检查依赖关系树时,我在 +--- com.zaxxer:HikariCP:3.4.5 (c) in spring-boot-starter-web dependency 中看到了一个约束。是因为这个吗? 【参考方案1】:

keepAliveTime 参数到达 HikariCP 4.0.0。为了将它与旧版本的 spring boot 一起使用 - 我们可以从读取它的位置排除 HikariCP 依赖项,并明确排除我们想要的版本。不推荐,但我发现使用 4.0.0 版本和 spring boot 版本 2.3.0-Release 没有问题

【讨论】:

以上是关于无法在 Spring Boot 中为 Hikari 设置 keepAlive Time 配置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring(4) 上下文中为 HSQL 配置 Hikari CP?

数据库故障后的 Hikari CP (Spring Boot) 连接恢复问题

带有PostgreSQL,Flyway和Hikari的Spring Boot 2:驱动程序声称不接受jdbcUrl

使用 Spring Boot 的 Mysql 的 Hikari 配置

Spring Boot Hikari 配置

Spring boot + hikari - dataSource or dataSourceClassName or jdbcUrl is required issue