Class GlueEnvironmentPostProcessor

java.lang.Object
com.poscoict.glueframework.boot.GlueEnvironmentPostProcessor
All Implemented Interfaces:
org.springframework.boot.EnvironmentPostProcessor, Ordered

public class GlueEnvironmentPostProcessor extends Object implements org.springframework.boot.EnvironmentPostProcessor, Ordered
Glue 설정(glue.properties)을 Spring Boot 환경(Environment)에 주입하는 EnvironmentPostProcessor.

왜 EnvironmentPostProcessor인가

Spring Boot에서 외부 설정 파일을 환경에 넣는 공식 확장점은 EnvironmentPostProcessor이며, 이는 환경이 만들어지는 단계(빈 생성·@ConfigurationProperties 바인딩 이전)에 실행된다. 따라서 여기서 PropertySource를 추가하면 application.properties 바인딩과 충돌하지 않는다.

(레거시의 PropertySourcesPlaceholderConfigurer 방식은 BeanFactoryPostProcessor 단계 — 즉 환경이 이미 완성되어 Boot이 바인딩하는 시점 — 에 살아있는 환경을 변형하여 application.properties의 표준 설정(server.port 등)을 무력화시키는 버그가 있었다. 이 클래스가 그 역할을 대체한다.)

동작

  1. 토글: glue.property.auto-load=false면 아무 것도 하지 않음(기본 true).
  2. CONFIG_PATH 브릿지: 시스템 프로퍼티 CONFIG_PATH가 없고 glue.config.path가 있으면 시스템 프로퍼티로 설정(GlueStaticContext·라이선스가 이를 사용).
  3. <CONFIG_PATH>/glue.properties 로드 → <CONFIG_PATH>/glue.cipher가 있으면 enc## 접두 값들을 로드 시점에 복호화(평문화).
  4. "glueProperties" PropertySource로 환경에 addLast(낮은 우선순위) 추가 → application.properties / 커맨드라인이 glue.properties를 override 가능.

복호화 적용 범위: 로드 시점에 평문화하므로 ${}·@Value·@ConfigurationProperties 모두에서 복호화된 값이 쓰인다(레거시는 ${} 치환 경로에서만 복호화됐던 것보다 개선). 단, application.properties에 직접 적은 enc##는 복호화 대상이 아니다(암호화 비밀은 CONFIG_PATH의 glue.properties에 두는 것이 정석).

See Also:
  • Constructor Details

    • GlueEnvironmentPostProcessor

      public GlueEnvironmentPostProcessor(org.springframework.boot.logging.DeferredLogFactory logFactory)
      Spring Boot가 spring.factories 등록을 보고 이 생성자(DeferredLogFactory 주입)로 인스턴스를 만든다.
      Parameters:
      logFactory - 지연 로그 팩토리
  • Method Details

    • postProcessEnvironment

      public void postProcessEnvironment(ConfigurableEnvironment environment, org.springframework.boot.SpringApplication application)
      Specified by:
      postProcessEnvironment in interface org.springframework.boot.EnvironmentPostProcessor
    • getOrder

      public int getOrder()
      application.properties(ConfigData)가 환경에 먼저 올라온 뒤 실행되도록 가장 낮은 우선순위로 둔다. (그래야 glue.config.path를 읽을 수 있고, glue.properties가 application.properties보다 아래 층에 놓인다.)
      Specified by:
      getOrder in interface Ordered