Spring Boot 2.7.3升级至3.0.2后EntityManagerFactory创建失败求助
问题:Spring Boot 3.x升级后EntityManagerFactory创建失败
将Spring Boot从2.7.3升级至3.0.0后,代码出现异常,EntityManagerFactory无法正常初始化,核心报错如下:
错误:Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaSharedEM_entityManagerFactory': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument
当前环境:Spring Boot 3.0.2,hibernate-core 6.1.6.Final
依赖配置详情
Gradle变量与插件配置
junitVersion=4.13.1 awsSDKVersion=1.11+ testPostgresVersion=1.15.0 jacocoVersion=0.8.7 guavaVersion=31.1-jre servicePort=80 version=22.1.0 serviceName=Test postgresJdbcVersion=42.4.1 hibernateVersion=6.1.6.Final secretsManagerJdbcVersion=1.0.5 secretsManagerCacheVersion=1.0.1 flywayVersion=6.4.3 jakartaVersion=3.1.0 httpclient5=5.2.1 plugins { id 'java-library' id 'idea' id 'org.springframework.boot' version '3.0.2' apply false id 'io.spring.dependency-management' version '1.1.0' id 'com.test.gradle.minion-application' version '5.+' } jacoco { toolVersion = "${jacocoVersion}" } mainClassName='com.test.modelgenerator.ModelGeneratorApplication' minion { maintainer='test-team@incontact.com' baseImage='111111111.dkr.ecr.us-west-2.amazonaws.com/workbench-base-java17:2-1.0.0' } wrapper { gradleVersion = '7.6' } jar { enabled=true } dependencyManagement { imports { mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES } } configurations.all { // check for updates every build resolutionStrategy.cacheChangingModulesFor 0, 'seconds' }
依赖声明
dependencies { implementation "org.apache.logging.log4j:log4j-core:2.17.1" implementation "org.apache.logging.log4j:log4j-api:2.17.1" implementation "org.apache.logging.log4j:log4j-1.2-api:2.17.1" implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.17.1' implementation 'org.springframework.retry:spring-retry' implementation ("org.springframework.boot:spring-boot-starter-data-jpa"){ exclude group : 'org.yaml' , module : 'snakeyaml' } implementation 'org.springframework:spring-aspects' implementation "com.amazonaws:aws-java-sdk-dynamodb:${awsSDKVersion}" implementation ("com.amazonaws:aws-java-sdk-core:${awsSDKVersion}"){ exclude group : 'org.yaml' , module : 'snakeyaml' } implementation "com.amazonaws:aws-java-sdk-ssm:${awsSDKVersion}" implementation "com.google.guava:guava:${guavaVersion}" implementation "org.flywaydb:flyway-core:${flywayVersion}" implementation group: 'commons-io', name: 'commons-io', version: '2.7' // For assuming role in local dev mode implementation "com.amazonaws:aws-java-sdk-sts:${awsSDKVersion}" implementation "com.amazonaws.secretsmanager:aws-secretsmanager-jdbc:${secretsManagerJdbcVersion}" implementation "com.amazonaws.secretsmanager:aws-secretsmanager-caching-java:${secretsManagerCacheVersion}" implementation "org.postgresql:postgresql:${postgresJdbcVersion}" //implementation "org.hibernate:hibernate-c3p0:${hibernateVersion}" implementation "jakarta.persistence:jakarta.persistence-api:${jakartaVersion}" implementation "org.apache.httpcomponents.client5:httpclient5:${httpclient5}" testImplementation "cloud.localstack:localstack-utils:${localStackUtilsVersion}" testImplementation "org.testcontainers:postgresql:${testPostgresVersion}" testImplementation "junit:junit:${junitVersion}" testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' exclude group : 'org.yaml' , module : 'snakeyaml' } }
排查与修复方案
- 移除显式引入的Jakarta Persistence API依赖:Spring Boot 3.x的
spring-boot-starter-data-jpa已经通过官方BOM管理了适配的Jakarta Persistence API版本,手动引入的jakarta.persistence:jakarta.persistence-api:3.1.0会导致版本冲突,引发类加载异常,直接删除该依赖即可。 - 升级Flyway版本:当前使用的Flyway 6.4.3不兼容Spring Boot 3.x的Jakarta EE环境,建议升级至Flyway 9.x及以上版本(Spring Boot 3.0.x推荐版本为9.1.1+),避免数据库迁移模块与JPA组件的兼容性问题。
- 更新AWS SDK版本:
awsSDKVersion=1.11+是老旧的AWS SDK v1版本,存在Java 17和Jakarta环境的兼容性风险,建议升级到AWS SDK v2,或者使用AWS SDK v1中支持Java 17的最新版本(如1.12.500+)。 - 适配JPA配置属性:检查项目配置文件(application.properties/yml),将所有
javax.persistence.*开头的属性替换为jakarta.persistence.*,确保配置适配Jakarta EE规范。 - 检查自定义EntityManagerFactory配置:如果项目中有自定义的
EntityManagerFactoryBean,确认所有相关类的包路径已从javax.persistence切换为jakarta.persistence,Spring Boot 3.x不再支持javax相关的JPA API。
内容的提问来源于stack exchange,提问作者NarenC
相关产品推荐
相关产品推荐

