2016-08-26 4 views

답변

0

이 작업을 수행하는 많은 방법이있다; I'll just quote the official documentation :

SpringApplicationApplicationListener의 컨텍스트 또는 환경에 대한 정의를 적용하는 데 사용되는 ApplicationContextInitializer S를 갖는다. 스프링 부트는 META-INF/spring.factories에서 내부적으로 사용할 수 있도록 여러 가지 맞춤 설정을로드합니다. 추가 사람을 등록하는 방법은 여러 가지가 있습니다 :

당신이 그것을 실행하기 전에 SpringApplicationaddListenersaddInitializers 메소드를 호출하여 응용 프로그램 당 프로그래밍
  • .
  • 응용 프로그램마다 선언적으로 context.initializer.classes 또는 context.listener.classes으로 설정하십시오.
  • META-INF/spring.factories을 추가하고 응용 프로그램이 모두 라이브러리로 사용하는 jar 파일을 패키징하여 모든 응용 프로그램에 대해 선언적으로 선언하십시오.

SpringApplication은 (컨텍스트가 생성 심지어 일부 전) 청취자에게 특별한 ApplicationEvents을 보낸 다음뿐만 아니라 ApplicationContext에 의해 게시 된 이벤트에 대한 리스너를 등록합니다. 전체 목록은 'Spring Boot features'섹션의 Section 23.4, “Application events and listeners”을 참조하십시오.

EnvironmentPostProcessor을 사용하여 응용 프로그램 컨텍스트를 새로 고치기 전에 Environment을 사용자 지정할 수도 있습니다.

org.springframework.boot.env.EnvironmentPostProcessor=com.example.YourEnvironmentPostProcessor 

내 방법은 ApplicationEnvironmentPreparedEvent 리스너 추가 언제나 : 각 구현은 META-INF/spring.factories에 등록해야

public class IntegrationTestBootstrapApplicationListener implements 
    ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered { 

    public static final int DEFAULT_ORDER = Ordered.HIGHEST_PRECEDENCE + 4; 
    public static final String PROPERTY_SOURCE_NAME = "integrationTestProps"; 

    private int order = DEFAULT_ORDER; 

    public void setOrder(int order) { 
     this.order = order; 
    } 

    @Override 
    public int getOrder() { 
     return this.order; 
    } 

    @Override 
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { 
     ConfigurableEnvironment environment = event.getEnvironment(); 

     if (!environment.getPropertySources().contains(PROPERTY_SOURCE_NAME)) { 
      Map<String, Object> properties = ...; // generate the values 

      // use whatever precedence you want - first, last, before, after 
      environment.getPropertySources().addLast(
       new MapPropertySource(PROPERTY_SOURCE_NAME, properties)); 
     } 
    } 

} 

을하지만 당신은 그냥 쉽게 초기화 사용할 수 있습니다

public class IntegrationTestBootstrapApplicationListener implements 
    ApplicationContextInitializer<ConfigurableApplicationContext> { 

    private static final String PROPERTY_SOURCE_NAME = "integrationTestProps"; 

    @Override 
    public void initialize(final ConfigurableApplicationContext applicationContext) { 
     ConfigurableEnvironment environment = applicationContext.getEnvironment(); 
     Map<String, Object> properties = ...; // generate the values 

     // use whatever precedence you want - first, last, before, after 
     environment.getPropertySources().addLast(
      new MapPropertySource(PROPERTY_SOURCE_NAME, properties)); 
    } 
} 
+0

을 이니셜 라이저를 감지하기 위해 봄을 만들 수 있다고 설명 할 수 있습니까? 이 클래스는 어디에 사용됩니까? –

+0

인용 된 텍스트에 이미 설명이 있습니다. 자세한 내용은 글 머리 기호 목록을 참조하십시오. –