SpringBoot 2.7.0升级至3.3.3时jpaSharedEM_entityManagerFactory注入异常求助
1. 检查EntityManagerFactory配置适配性
- 核对
application.properties/application.yml中的JPA配置,确保适配Spring Boot 3.x:- 驱动类替换为Jakarta EE兼容版本,比如MySQL用
com.mysql.cj.jdbc.Driver(弃用旧的com.mysql.jdbc.Driver) - 数据库URL需包含必要参数,比如MySQL的
serverTimezone - 方言使用对应版本,比如
org.hibernate.dialect.MySQL8Dialect(适配MySQL 8+)
- 驱动类替换为Jakarta EE兼容版本,比如MySQL用
- 若自定义了
EntityManagerFactoryBean,必须使用Jakarta EE包路径(jakarta.persistence.*),示例代码:@Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource); em.setPackagesToScan("com.yourpackage.entity"); HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); em.setJpaVendorAdapter(vendorAdapter); Map<String, Object> properties = new HashMap<>(); properties.put("hibernate.hbm2ddl.auto", "update"); properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect"); em.setJpaPropertyMap(properties); return em; }
2. 修正@EnableJpaRepositories配置
- 若自定义了EntityManagerFactory,需在
@EnableJpaRepositories中指定entityManagerFactoryRef属性,绑定对应的Bean名称:@SpringBootApplication @EnableJpaRepositories(basePackages = "com.yourpackage.repository", entityManagerFactoryRef = "entityManagerFactory") public class StudioApplication { public static void main(String[] args) { SpringApplication.run(StudioApplication.class, args); } } - 确认
basePackages覆盖了所有Repository所在的包,避免漏扫。
3. 排查依赖冲突
- 执行
mvn dependency:tree(Maven)或./gradlew dependencies(Gradle),检查是否残留javax.persistence相关旧依赖,需排除所有javax.*的JPA相关依赖,确保全部使用Jakarta EE版本。 - 确认
spring-boot-starter-data-jpa为3.3.3版本,未被其他依赖降级。
4. 规范UserDetailsService的依赖注入
- 优先使用构造函数注入UserRepository,避免字段注入的潜在问题:
@Service public class CustomUserDetailsService implements UserDetailsService { private final UserRepository userRepository; public CustomUserDetailsService(UserRepository userRepository) { this.userRepository = userRepository; } @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 业务逻辑实现 } } - 确保UserRepository接口正确继承
JpaRepository或Spring Data JPA的其他Repository接口。
5. 清理缓存并重新构建
- 执行项目清理构建:Maven用
mvn clean install,Gradle用./gradlew clean build - 清除IDE缓存(比如IntelliJ IDEA的
File -> Invalidate Caches...),避免旧编译文件干扰。
内容的提问来源于stack exchange,提问作者Deepthy Lalitha
相关产品推荐
相关产品推荐

