java - 多模块项目的 Spring Boot 组件扫描问题

标签 java spring spring-boot

我有一个带有 myapp-core 和 myapp-web 模块的 myapp 父 pom 类型 maven 项目。 myapp-core 模块被添加为 myapp-web 的依赖项。

myapp-core 模块中的所有类都驻留在根包 com.myapp.core 中,myapp-web 模块中的所有类都驻留在根包 com.myapp.web 中>

主要的Application.java也在com.myapp.web包中。由于我的核心模块根包不同,我包括了 ComponentScan 的通用基础包 “com.myapp”,如下所示:

@Configuration
@ComponentScan(basePackages="com.myapp")
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }   
}

现在令人惊讶的是,如果我使用 Run As -> Spring Boot App 运行这个应用程序,它工作正常。但是,如果我以 Run As -> Java Application 运行它,它会失败,并显示错误消息,说它找不到在 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 我可以使用 Run As -> Java Application 来运行它。

但仍然不确定它在 Run As -> Spring Boot App 时如何正常工作!!

无论如何,我认为最好将我的 Application.java 移动到 com.myapp 包而不是与 SpringBoot 战斗!

关于java - 多模块项目的 Spring Boot 组件扫描问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30587377/

相关文章:

java - 在java中跟踪鼠标移动

spring - 针对不同的 url 模式使用不同的过滤器

java - spring-boot 2.3.0.M4 JDK 11 集成NoSuchBeanDefinitionException ...ConfigurationClassPostProcessor, ...ProxyTransactionManagementConfiguration

node.js - 如何将 React 应用程序部署到 Prod 以及如何管理版本控制

java - 使用 ChangeListener 触发 Java Swing 中的更改?

java - 如何将一个大序列文件拆分为多个序列文件?

java - 使用Java命令执行Makefile?

java - Spring Boot JAR 应用程序未从资源文件夹中读取 chromedriver.exe

java - Spring Boot 应用程序,已弃用 swagger-ui ApiInfo() 方法。需要替代方案

java - 非法参数异常 : Illegal base64 character 3a when decoding String value using Base64. getDecode()