如何在 spring boot 2.0 上将默认的 hikari cp 替换为 tomcat 池

How to replace default hikari cp to tomcat pool on spring boot 2.0

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

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

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

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

spring-boot-jpa
spring-boot-jdbc
jdbc7

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

我找到了解决办法。 这可以在 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

另外:

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

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

自从 Spring Boot 2.0 版本,spring-boot-starter-jdbc 和 spring-boot-starter-data-jpa 默认解析 HikariCP 依赖,spring.datasource.type 属性 默认使用 HikariDataSource value.So 如果你在你的应用程序中有两个依赖项,你应该像下面那样从两者中排除它。

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')