SpringBoot ComponentScan与多模块项目有关的问题
我有一个myapp父pom类型的maven项目,其中包含myapp-core和myapp-web模块。将myapp-core模块作为对myapp-
web的依赖项添加。
myapp-core模块中的所有类都位于根包 中,myapp-web模块中的所有类均位于根包
主Application.java也位于com.myapp.web包中。由于我的核心模块根包不同,因此我包括了ComponentScan的通用基本包 ,如下所示:
@Configuration@ComponentScan(basePackages="com.myapp")
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
现在令人惊讶的是,如果我使用 程序 运行此应用
它运行良好。但是,如果我以 身份 它,则会失败并显示错误消息,提示它找不到在myapp-
core模块中定义的bean。
如果我将其移动Application.java
到com.myapp
包装上,则可以正常工作。即使我也将其作为Java应用程序运行,它也应该起作用,对吗?
回答:
在为spring启用调试日志级别并浏览大量日志之后,我发现扫描各种组件(如JPA存储库,JPA实体等)取决于Application.java的程序包名称。
如果JPA信息库或实体不在包的子包中,Application.java
则我们需要按以下方式明确指定它们:
@Configuration@ComponentScan(basePackages="com.sivalabs.jcart")
@EnableAutoConfiguration
@EnableJpaRepositories(basePackages="com.sivalabs.jcart")
@EntityScan(basePackages="com.sivalabs.jcart")
public class Application{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
通过上述附加功能@EnableJpaRepositories
,@EntityScan
我可以使用 来运行它。
但是仍然不确定 时它如何正常工作!
无论如何,我认为最好将我Application.java
的com.myapp
软件包移到软件包中,而不是与SpringBoot战斗!
以上是 SpringBoot ComponentScan与多模块项目有关的问题 的全部内容, 来源链接: utcz.com/qa/410762.html