spring.factories 는 언제, 어떻게 사용하는가? / 환경 변수 설정 방법 / 특정 config 설정 방법 /
spring boot 에서 properties 추가
*.properties
파일을 만들고, 그안에 설정값들을 넣는다고
해보자.
# myinit.properties
my.app.sleeptime=5000
my.app.rate=1
보통은 이 값을 그냥 불러다가 필요한 곳에 쓰면 된다. 근데 spring context 안에서 사용하기 위해서 spring context 가 가지고 있는 변수에 넣어주는 과정이 필요한듯 하다. (추측)
그래서 이것을 위한 방법으로 Spring 은 ConfigurableEnvironment 를 제공하는 듯 하다. 이녀석이 호출되는 시점은 아래그림을 참고하자.
![from: ref. 1](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzmTOeVlxNfRXT9UZ1Y57OR-fF7WVAmK8B73lSLkKQgnE5AeU2-0Z0JZRQb9nKs-00KKh9yzbIGjHfKaBJD4D0ZGy2drfBF2Zf4c6NYosf9TNQ0Zw-ZH3xvo2jK02kjbP1HsSV0aNISuWeg3W_D4wheE1iEnyfBGNnMwm7QOWRlLvePKlSpvY/s521/484d4c05-ecdc-46ec-a0ed-ce87d9a3ab84.png)
// code from ref. 2
public class MyEnvPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
SpringApplication application) {
PropertySource<?> system = environment.getPropertySources()
.get(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME);
if (!hasOurPriceProperties(system)) {
// error handling code omitted
}
Map<String, Object> prefixed = names.stream()
.collect(Collectors.toMap(this::rename, system::getProperty));
environment.getPropertySources()
.addAfter(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, new MapPropertySource("prefixer", prefixed));
}
}
Spring Boot bootstrap process 에서 이 implementation 을 호출하기
위해서, META-INF/spring.factories
에 등록해야 된다.[ref. 2]
(정말 별로다, -.-)
org.springframework.boot.env.EnvironmentPostProcessor=
com.my.environmentpostprocessor.MyEnvPostProcessor
댓글 없음:
댓글 쓰기