봄 속성 소스의 기본 순서를 알고 있습니다 : http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html 특정 우선 순위로 내 속성 소스를 추가하려면 어떻게합니까? 매우 낮은 우선 순위로 새 속성을 추가로스프링 부트 속성 소스의 계층 구조에 플러그
@PropertySource
는 충분하지 않습니다
봄 속성 소스의 기본 순서를 알고 있습니다 : http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html 특정 우선 순위로 내 속성 소스를 추가하려면 어떻게합니까? 매우 낮은 우선 순위로 새 속성을 추가로스프링 부트 속성 소스의 계층 구조에 플러그
@PropertySource
는 충분하지 않습니다
이 작업을 수행하는 많은 방법이있다; I'll just quote the official documentation :
당신이 그것을 실행하기 전에
SpringApplication
는ApplicationListener
의 컨텍스트 또는 환경에 대한 정의를 적용하는 데 사용되는ApplicationContextInitializer
S를 갖는다. 스프링 부트는META-INF/spring.factories
에서 내부적으로 사용할 수 있도록 여러 가지 맞춤 설정을로드합니다. 추가 사람을 등록하는 방법은 여러 가지가 있습니다 :SpringApplication
에addListeners
및addInitializers
메소드를 호출하여 응용 프로그램 당 프로그래밍
- .
- 응용 프로그램마다 선언적으로
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));
}
}
을 이니셜 라이저를 감지하기 위해 봄을 만들 수 있다고 설명 할 수 있습니까? 이 클래스는 어디에 사용됩니까? –
인용 된 텍스트에 이미 설명이 있습니다. 자세한 내용은 글 머리 기호 목록을 참조하십시오. –