[컴] spring boot 에서 properties 추가

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
// 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

References

  1. Spring Context Internals: Part 2 - Bean Sources - CodeProject : spring context 에 좋은 설명
  2. Registration in the spring.factories, EnvironmentPostProcessor in Spring Boot | Baeldung

댓글 없음:

댓글 쓰기