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

Java17+SpringBoot3升级后H2数据库DataSource及JPA接口异常排查

问题分析与解决建议

核心原因

Spring Boot 3.0+ 基于Jakarta EE 9+,所有Java EE相关的包从javax.*迁移到了jakarta.*,当前项目存在javax与jakarta包冲突,同时手动添加的Hibernate版本和Spring Boot 3.0.6不兼容,导致PersistenceProvider接口实现不匹配、DataSource参数解析失败。

具体解决步骤

1. 移除手动添加的Hibernate及JPA API依赖

Spring Boot 3.0.6的spring-boot-starter-data-jpa已经内置了兼容的Hibernate 6.x版本,手动添加的依赖会引发版本冲突。直接删除pom.xml中以下内容:

<!-- 移除这两个手动添加的依赖 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>xxx</version>
</dependency>
<dependency>
    <groupId>jakarta.persistence</groupId>
    <artifactId>jakarta.persistence-api</artifactId>
    <version>xxx</version>
</dependency>

2. 替换所有javax相关导入为jakarta

遍历项目代码,将所有javax.persistence.*、javax.sql.*等导入替换为jakarta.persistence.*、jakarta.sql.*:

  • 错误示例:import javax.persistence.Entity; → 正确:import jakarta.persistence.Entity;
  • 错误示例:import javax.sql.DataSource; → 正确:import jakarta.sql.DataSource;

3. 确认Spring Boot Starter依赖正确性

确保pom.xml中使用Spring Boot 3.0.6的parent及标准starter依赖:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.6</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

4. 校验测试环境配置

确保application-test.yaml使用Spring Boot 3.x兼容的配置项(避免自定义javax相关配置):

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
    properties:
      hibernate:
        format_sql: true
  h2:
    console:
      enabled: true

5. 清理依赖缓存并重新构建

执行命令清理缓存,确保依赖完全更新:

# Maven
mvn clean install -U

# Gradle(若使用Gradle)
./gradlew clean build --refresh-dependencies

6. 检查测试类配置

确保测试类使用正确的Spring Boot测试注解,无旧版javax相关引用:

import jakarta.persistence.EntityManager;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

@DataJpaTest
public class YourRepositoryTest {

    @Autowired
    private EntityManager entityManager;

    @Test
    void testRepositoryLogic() {
        // 测试代码
    }
}

关键注意事项

  • 严禁混合使用Java EE(javax)和Jakarta EE(jakarta)的包,这是Spring Boot 3.x升级的高频踩坑点。
  • 始终依赖Spring Boot Starter管理依赖版本,避免手动指定Hibernate、JPA API等组件版本,防止兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:52:30