在基于Spring Cloud构建微服务框架时,往往持久化层的实体类是各个微应用都需要依赖的。所以,将这部分抽取出来作为单独一个模块让需要的微应用引入,是常见的一种做法。
像这样:
<dependency>
<groupId>com.sensible</groupId>
<artifactId>spring-common</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
但是,这样可能我们会遇到一点麻烦,当我们启动服务的时候出现了问题:
java.lang.IllegalArgumentException: Not a managed type
提示信息显示:对应的实体不是托管的类。
先抽支烟,压压惊。
这个错误提示,是不是说明我们的 Spring 没有找到这个类,所以无法管理这个类。这么一来,问题就是出在组件扫描。
我们知道,Spring Boot 项目,它默认的扫描机制是从启动类所在的包开始,如果在公共模块中JPA实体所在的包跟依赖公共模块的微应用模块启动类所在的包不同,则会报这个错。
解决方案
在启动类添加注解,指定实体扫描路径:
@EntityScan("com.xxx.entity")
网友评论