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

Spring Boot 2转3自定义Starter(含实体与仓库)迁移问题求助

解决方案

问题根源

Spring Boot 3对自动配置加载机制、JPA实体扫描逻辑做了调整,原Spring Boot 2中通过自定义ImportBeanDefinitionRegistrar注册实体包的方式不再可靠,同时自动配置类的注册方式也发生了变化,导致EntityManagerFactory无法扫描到Starter中的实体类。

步骤1:更新自动配置类的注册方式

Spring Boot 3废弃了META-INF/spring.factories中配置自动类的方式,改用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件。在你的Starter项目中创建该文件,添加自动配置类的全限定名:

com.example.starter.config.UserManagementAutoConfiguration

步骤2:调整自动配置类实现(二选一)

方案A:实现AutoConfigurationPackages.Registrar接口

移除自定义的StarterEntityRegistrar,让自动配置类直接实现AutoConfigurationPackages.Registrar接口,确保实体包被注册到自动配置扫描列表中:

@Configuration
@AutoConfigureBefore(JpaRepositoriesAutoConfiguration.class)
@EnableJpaRepositories(basePackages = {"com.example.starter.repository"})
public class UserManagementAutoConfiguration implements AutoConfigurationPackages.Registrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
        AutoConfigurationPackages.register(registry, User.class.getPackage().getName());
    }
}

方案B:直接添加@EntityScan注解

更简洁的方式是在自动配置类上添加@EntityScan,明确指定实体所在的包路径:

@Configuration
@AutoConfigureBefore(JpaRepositoriesAutoConfiguration.class)
@EnableJpaRepositories(basePackages = {"com.example.starter.repository"})
@EntityScan(basePackages = {"com.example.starter.model.entity"})
public class UserManagementAutoConfiguration {
}

验证要点

  • 确保Starter依赖的spring-boot-starter-data-jpa版本与Spring Boot 3.x匹配
  • 检查主应用的@SpringBootApplication未通过exclude排除你的Starter自动配置类
  • 启动主应用后,可通过日志确认EntityManagerFactory已扫描到com.example.starter.model.entity.User实体

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:07:32