IT

스프링 부트 응용 프로그램에서 @Configuration 제외

itgroup 2023. 4. 3. 21:25
반응형

스프링 부트 응용 프로그램에서 @Configuration 제외

모듈(예를 들어 3개)이 여러 개 있습니다.두 개는 스프링 부트 기반 모듈이고 다른 하나는 스프링 기반 모듈입니다.설명 모듈 1 - 스프링 부트 모듈 2 - 스프링 부트 모듈 3 - 공통 모듈만 스프링 기반

모듈 3 @1이 아닌 모듈2에만 의해 선택되어야 하는 설정 파일.

컨피규레이션파일을 제외하기 위해 여러 가지를 시도했습니다.예:-

@SpringBootApplication
@ComponentScan(basePackages = {"com.adobe"}
, excludeFilters = {
    @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {WorkerConfig.class, WorkerExecutors.class, Worker.class})})
public class Application {

  private static final Logger logger = LoggerFactory.getLogger(Application.class);

  public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
  }

}

그래도 @Configuration 클래스는 제외되지 않고 Spring은 내가 원하지 않는 어플리케이션 컨텍스트에서 로드하려고 합니다.마이 컨피규레이션클래스

@Configuration
public class WorkerConfig {

  @Bean
  public WorkerExecutors workerExec() {
    WorkerExecutors executors = new WorkerExecutors();
    return executors;
  }

}

또한 @ComponentScan 주석에서 다음과 같이 읽습니다.

 * <p>Note that the {@code <context:component-scan>} element has an
 * {@code annotation-config} attribute; however, this annotation does not. This is because
 * in almost all cases when using {@code @ComponentScan}, default annotation config
 * processing (e.g. processing {@code @Autowired} and friends) is assumed. Furthermore,
 * when using {@link AnnotationConfigApplicationContext}, annotation config processors are
 * always registered, meaning that any attempt to disable them at the
 * {@code @ComponentScan} level would be ignored.

컴포넌트 스캔에서 제외하는 것은 기능하지 않는 것 같습니다.위 외에 다른 방법으로도 사용을 제외하려고 했습니다.

@SpringBootApplication(exclude= {WorkerExecutors.class, Worker.class,WorkerConfig.class})
public class Application {

하지만 봄 부츠는 던진다.

java.lang.IllegalStateException: The following classes could not be excluded because they are not auto-configuration classes:
    - com.adobe.repository.worker.lib.config.WorkerConfig
    - com.adobe.acp.repository.worker.lib.core.WorkerExecutors
    - com.adobe.acp.repository.worker.lib.core.Worker

스프링 부트 모듈 내의 비스프링 부트모듈을 스캔하는 컴포넌트 스캔을 무효로 하는 방법(다른 패키지를 삽입하는 방법 제외)다른 패키지에 넣고 싶지 않아요.

어떤 도움이라도 감사합니다!!

이 기능을 사용해 보십시오.

@SpringBootApplication
@ComponentScan(excludeFilters  = {@ComponentScan.Filter(
              type = FilterType.ASSIGNABLE_TYPE, classes = {WorkerConfig.class, WorkerExecutors.class, Worker.class})})

자동 구성 패키지는 org.springframework.boot.autoconfigure 아래에 있습니다.그렇기 때문에 할 수 없습니다.

@SpringBootApplication(exclude= {WorkerExecutors.class, Worker.class,WorkerConfig.class})

봄은 시키는 대로 한다.문의처:

@ComponentScan(basePackages = {"com.adobe"}
, excludeFilters = {
    @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {WorkerConfig.class, WorkerExecutors.class, Worker.class})})

따라서 Spring은 이러한 노동자 클래스를 로드하지 않습니다.그렇기 때문에 Spring은 @Configuration으로 주석을 단 수업을 "실행"하지 않습니다.

하지만 당신이 하려는 일은 이해가 안 돼요.모듈(자바 클래스)이 있는 것처럼 들리지만 모두 같은 봄 컨텍스트의 일부입니다.Spring Context가 1개일 경우 Spring에게 일부 @Configuration 클래스를 로드하도록 지시할 수 있습니다.그런 다음 "모듈"에서 필요한 모든 것을 주입할 수 있습니다.모듈 1은 모듈3의 콩을 주입하지만 모듈2는 주입하지 않습니다.그렇게 간단하다.

어떤 이유로 모듈2가 모듈3에서 콩에 액세스 하는 것을 방지하고 모듈3을 모듈1에서 계속 표시할 필요가 있는 경우 모듈1과 모듈2를 2개의 다른 스프링부트 앱으로 분리하면 모듈3이 일반적인 코드가 됩니다그러나 이 접근 방식은 현재 아키텍처를 파괴할 수 있습니다.

2019년 3월 29일 금요일 업데이트

이것을 시험해 보세요.

@SpringBootApplication
@ComponentScan(basePackages = { "com.myapp" }, excludeFilters = { @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { MyClass2.class }) })

그것은 나에게 효과가 있었다.MyClass와 MyClass2가 있는데 MyClass는 로드되어 있고 MyClass2는 로드되어 있지 않습니다.Spring Boot 1.5.9로 시도했습니다.모든 종속성에 대한 릴리스 및 스프링봄.

언급URL : https://stackoverflow.com/questions/55403688/exclude-configuration-from-spring-boot-application

반응형