itsource

SpringBoot 구성 요소다중 모듈 프로젝트 스캔 문제

mycopycode 2023. 7. 21. 21:36
반응형

SpringBoot 구성 요소다중 모듈 프로젝트 스캔 문제

나는 나의 app-core와 나의 app-web 모듈로 나의 부모님 pom 타입 maven 프로젝트가 있습니다. 나의 app-core 모듈은 나의 app-web에 대한 의존성으로 추가되었습니다.

내 앱-코어 모듈의 모든 클래스는 루트 패키지 com.myapp.core에 있고 내 앱-웹 모듈의 모든 클래스는 루트 패키지 com.myapp에 있습니다.거미줄

메인 Application.java도 com.myapp에 있습니다.웹 패키지코어 모듈 루트 패키지가 다르므로 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으로 실행하면 앱 코어 모듈에 정의된 빈을 찾을 수 없다는 오류와 함께 실패합니다.

내가 움직이면,Application.java로.com.myapp패키지는 잘 작동하고 있습니다.제가 자바 애플리케이션으로도 실행해도 되는 거죠?

봄에 대한 디버그 로그 수준을 활성화하고 광범위한 로그를 검토한 후 JPA 저장소, JPA 엔티티 등과 같은 다양한 구성 요소에 대한 검색이 애플리케이션에 따라 다르다는 것을 알게 되었습니다.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다른 이름으로 실행 -> Java Application을 사용하여 실행할 수 있습니다.

하지만 여전히 Run As -> Spring Boot App에서 어떻게 작동하는지 잘 모르겠습니다!!

어쨌든 나는 내 것을 옮기는 것이 더 낫다고 생각합니다.Application.java로.com.myappSpringBoot과 싸우는 것보다 패키지!

저도 같은 문제가 있어요.@EnableJpaResposities 주석을 추가해야만 이 문제를 해결할 수 있습니다.@SpringBootApplication에서 basePackages를 정의하려고 했지만 실패했습니다.Application 클래스의 패키지가 JpaResposities의 검색 프로세스에 제공되지만 @SpringBootApplication에 정의된 다른 패키지는 무시됩니다.스프링 부트의 버그/개선 사항으로 보입니다.

Redis 저장소에서도 비슷한 문제가 발생하여 다음과 같은 문제가 해결되었습니다.


@Configuration
@EnableConfigurationProperties({RedisProperties.class})
@RequiredArgsConstructor
@EnableRedisRepositories(basePackages = {"com.example.another"})
public class RedisConfig {

    private final RedisConnectionFactory redisConnectionFactory;

    @Bean
    public RedisTemplate<?, ?> redisTemplate() {
        RedisTemplate<byte[], byte[]> template = new RedisTemplate<byte[], byte[]>();
        template.setConnectionFactory(redisConnectionFactory);
        template.afterPropertiesSet();
        return template;
    }
}

언급URL : https://stackoverflow.com/questions/30587377/springboot-componentscan-issue-with-multi-module-project

반응형