如何在 Spring Boot 2.0 上将默认 hikari cp 替换为 tomcat 池

Posted

技术标签:

【中文标题】如何在 Spring Boot 2.0 上将默认 hikari cp 替换为 tomcat 池【英文标题】:How to replace default hikari cp to tomcat pool on spring boot 2.0 【发布时间】:2018-10-14 19:58:41 【问题描述】:

我已经将 Spring Boot 应用程序迁移到 2.0 并发现了 hikari 连接池的一些问题。当我获取数据库数据时,这会导致 hikari cp timeout 即。连接不可用。我不知道为什么在以前的版本中它可以正常工作。

因此,我尝试在 application.yml 中使用带有此配置的 tomcat 池,但它不起作用(以正确的 YAML 格式)。

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

我的 pom.xml 有这些与数据库相关的依赖项:

spring-boot-jpa
spring-boot-jdbc
jdbc7

如何排除hikari并使用tomcat连接池?

【问题讨论】:

【参考方案1】:

我已经找到了解决方案。 这可以通过如下修改在 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>

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
</dependency>

然而,hikari 问题可能与默认的小连接池有关。所以这个问题也可以通过这个改变来解决,但我自己没有验证。只为别人注意。类似的东西:

spring.datasource.hikari.connection-timeout=60000
spring.datasource.hikari.maximum-pool-size=5

【讨论】:

光仍然处于活动状态 关于池大小的增加。它仍然无法解决 Hikari 问题,我们的设置为 20 分钟和 100 Max,我们有时会收到错误,我们的生产系统崩溃了。【参考方案2】:

自 Spring Boot 2.0 发布以来,spring-boot-starter-jdbc 和 spring-boot-starter-data-jpa 默认解析 HikariCP 依赖,spring.datasource.type 属性将 HikariDataSource 作为默认值。所以如果你有两个依赖在您的应用程序中,您应该将其从以下两者中排除。

implementation('org.springframework.boot:spring-boot-starter-data-jpa') 
    exclude group: 'com.zaxxer', module: 'HikariCP'

implementation('org.springframework.boot:spring-boot-starter-jdbc') 
    exclude group: 'com.zaxxer', module: 'HikariCP'

之后,您可以配置您喜欢使用的其他池化技术,如下所示 . 在您的 application.yml 文件中:

spring:
   datasource:
     type: org.apache.tomcat.jdbc.pool.DataSource

依赖:

implementation('org.apache.tomcat:tomcat-jdbc')

【讨论】:

【参考方案3】:

还有:

spring:
    datasource:
        type: org.apache.tomcat.jdbc.pool.DataSource

适用于

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
</dependency>

【讨论】:

我在撒谎......只有排除有帮助:/

以上是关于如何在 Spring Boot 2.0 上将默认 hikari cp 替换为 tomcat 池的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 2.0之使用spring boot

Spring Boot 2.0:Spring Boot 2.0尝鲜-动态 Banner

Spring Boot 2.0:Spring Boot 如何解决项目启动时初始化资源

Spring Boot 2.0:Spring Boot 如何解决项目启动时初始化资源

在 Spring-boot 上将 Spring Batch 与 spring-batch-admin-manager 集成时出错

Spring boot 2.0 - 为用户配置