복붙노트

[SPRING] 다중 모듈 프로젝트에서 Spring 부트 구성 요소 스캔 문제

SPRING

다중 모듈 프로젝트에서 Spring 부트 구성 요소 스캔 문제

myapp-core 및 myapp-web 모듈을 사용하여 myapp parent 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 응용 프로그램으로 실행하더라도 작동합니다, 맞습니까?

해결법

  1. ==============================

    1.Spring 용 디버그 로그 레벨을 활성화하고 광범위한 로그를 살펴본 후 JPA 리포지토리, JPA 엔티티 등 다양한 구성 요소를 검색하는 것이 Application.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 !!

    어쨌든 SpringBoot와의 싸움보다 Application.java를 com.myapp 패키지로 옮기는 것이 더 낫다고 생각합니다!

  2. ==============================

    2.나도 같은 문제가있어. @EnableJpaRepositories 주석 만 추가하면 문제를 해결할 수 있습니다. @SpringBootApplication에 basePackages를 정의하려고했지만 아무 쓸모가 없습니다. Application 클래스의 패키지는 JpaRepositories의 스캐닝 프로세스에 제공되지만 @SpringBootApplication에 정의 된 다른 패키지는 무시된다고 생각합니다. 그것은 Spring Boot의 버그 / 개선과 같이 보입니다.

    나도 같은 문제가있어. @EnableJpaRepositories 주석 만 추가하면 문제를 해결할 수 있습니다. @SpringBootApplication에 basePackages를 정의하려고했지만 아무 쓸모가 없습니다. Application 클래스의 패키지는 JpaRepositories의 스캐닝 프로세스에 제공되지만 @SpringBootApplication에 정의 된 다른 패키지는 무시된다고 생각합니다. 그것은 Spring Boot의 버그 / 개선과 같이 보입니다.

  3. from https://stackoverflow.com/questions/30587377/springboot-componentscan-issue-with-multi-module-project by cc-by-sa and MIT license