You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从Spring Boot项目中移除Hikari连接池的问题咨询

为什么移除Hikari依赖后,Spring Boot项目使用JPA时Hikari连接池仍会启动?

问题描述

我最初在项目中添加了Hikari数据源,之后想要使用JPA,于是从pom.xml中移除了相关依赖,现在项目使用JPA。但启动项目时,日志显示Hikari连接池已启动。

项目启动日志

.   ____          _            __ _ _
 /\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.5)

2022-11-07 03:57:53.329  INFO 18072 --- [           main] com.example.demo.BookControllerTests     : Starting BookControllerTests using Java 17.0.3 on Mahesh-PC with PID 18072 (started by v-mashelke in C:\Users\v-mashelke\Documents\workspace-spring-tool-suite-4-4.15.2.RELEASE\junit-rest-api-application)
2022-11-07 03:57:53.330  INFO 18072 --- [           main] com.example.demo.BookControllerTests     : No active profile set, falling back to 1 default profile: "default"
2022-11-07 03:57:53.820  INFO 18072 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-11-07 03:57:53.874  INFO 18072 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 43 ms. Found 1 JPA repository interfaces.
2022-11-07 03:57:54.409  INFO 18072 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-11-07 03:57:54.898  INFO 18072 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-11-07 03:57:54.969  INFO 18072 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-11-07 03:57:55.030  INFO 18072 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.12.Final
2022-11-07 03:57:55.103  INFO 18072 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-11-07 03:57:55.281  INFO 18072 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
2022-11-07 03:57:55.633  INFO 18072 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-11-07 03:57:55.643  INFO 18072 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2022-11-07 03:57:56.166  WARN 18072 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2022-11-07 03:57:56.703  INFO 18072 --- [           main] com.example.demo.BookControllerTests     : Started BookControllerTests in 3.609 seconds (JVM running for 5.396)

application.properties配置

spring.jpa.dataplatform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa-show-sql=true
spring.datasource.url=jdbc:mysql://localhost:3306/neon
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>junit-rest-api-application</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>junit-rest-api-application</name>
    <description>Spring Security using JWT</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hamcrest/hamcrest -->
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest</artifactId>
            <version>2.2</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

原因及解决方案

原因

Spring Boot的spring-boot-starter-data-jpa依赖默认会传递引入HikariCP。

你虽然删掉了手动添加的Hikari依赖,但spring-boot-starter-data-jpa作为JPA的启动器,已经内置了HikariCP作为默认连接池实现。只要你的项目中存在spring.datasource.*相关配置(比如你配置了数据库URL、账号密码),且类路径下有HikariCP,Spring Boot的自动配置机制就会自动初始化Hikari连接池。

解决方案

如果确实需要替换HikariCP,可以通过以下两种方式:

  1. 排除JPA starter中的Hikari依赖,添加其他连接池
    在pom.xml中修改spring-boot-starter-data-jpa依赖,排除HikariCP,然后引入你需要的连接池(比如Tomcat JDBC):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</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>
  1. 通过配置指定连接池类型
    在application.properties中添加配置,指定要使用的连接池类:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource

内容的提问来源于stack exchange,提问作者mahesh shelke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:56:05