问题描述
springboot的多模块工程,jpa实体类从公共工程引用,启动项目提示异常
java.lang.IllegalArgumentException: Not a managed type: class cn.springcloud.book.common.entity.SysUser
项目结构大致如下:
module1:cn.springcloud.book.common.entity.SysUser
module2:cn.springcloud.book.auth.repository.SysUserRepository
module3:cn.springcloud.book.auth.repository.SysUserRepository
module2和module3引用module1的@Entity
原因
SpringBoot默认包扫描机制是:从启动类所在包开始,扫描当前包及其子包下的所有文件
解决
启动类添加@EntityScan("cn.springcloud.book.common.entity")
完整代码(我的项目springcloud工程,普通springboot项目可以省略@EnableDiscoveryClient,@EnableCircuitBreaker)
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
@EntityScan("cn.springcloud.book.common.entity")
public class AuthServerApplication {
public static void main(String[] args) {
SpringApplication.run(AuthServerApplication.class, args);
}
}
延伸
引用公共module的对象可以使用如下注解:
(1)扫描@Bean、@Service、@Component
@ComponentScan(basePackages = "com.demo.xxx")
(2)扫描JPA的@Repository
@EnableJpaRepositories(basePackages = "com.demo.xxx")
(3)扫描JPA的@Entity
@EntityScan("com.demo.xxx")