[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.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.나도 같은 문제가있어. @EnableJpaRepositories 주석 만 추가하면 문제를 해결할 수 있습니다. @SpringBootApplication에 basePackages를 정의하려고했지만 아무 쓸모가 없습니다. Application 클래스의 패키지는 JpaRepositories의 스캐닝 프로세스에 제공되지만 @SpringBootApplication에 정의 된 다른 패키지는 무시된다고 생각합니다. 그것은 Spring Boot의 버그 / 개선과 같이 보입니다.
나도 같은 문제가있어. @EnableJpaRepositories 주석 만 추가하면 문제를 해결할 수 있습니다. @SpringBootApplication에 basePackages를 정의하려고했지만 아무 쓸모가 없습니다. Application 클래스의 패키지는 JpaRepositories의 스캐닝 프로세스에 제공되지만 @SpringBootApplication에 정의 된 다른 패키지는 무시된다고 생각합니다. 그것은 Spring Boot의 버그 / 개선과 같이 보입니다.
from https://stackoverflow.com/questions/30587377/springboot-componentscan-issue-with-multi-module-project by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Security 플러그인으로 기존 도메인 클래스 사용 (0) | 2019.01.22 |
---|---|
[SPRING] BindingResult가 @Valid를 따라야하는 이유는 무엇입니까? (0) | 2019.01.22 |
[SPRING] Spring에서 같은 키를 가진 여러 속성을 읽는 방법? (0) | 2019.01.22 |
[SPRING] Controller 메소드의 Collection에 바인딩 된 RequestBody 매개 변수에 대한 Spring 유효성 검사 (0) | 2019.01.22 |
[SPRING] Spring Security 3 용 AuthenticationSuccessHandler 예제 (0) | 2019.01.22 |