본문 바로가기
Spring/인프런 토비의 Spring Boot

섹션 8-2 [외부 설정을 이용한 자동 구성] 자동 구성에 Enviroment 프로퍼티 적용

by include_hoany 2024. 7. 26.

Enviroment 우선순위

@MySpringBootApplication  
public class TobyspringbootApplication {  
  
    @Bean  
    ApplicationRunner applicationRunner(Environment environment) {  
       return args -> {  
          String name = environment.getProperty("my.name");  
          System.out.println("my name: " + name);  
  
       };  
    }  
   
    public static void main(String[] args) {  
       SpringApplication.run(TobyspringbootApplication.class, args);  
    }  
  
}

 

application.properties

my.name=ApplicationProperties

 

run Environment Variables

MY_NAME=EnviromentVariables

applicationRunner를 통해 설정된 Enviroment를 확인해보면 my name:  EnviromentVariables이 찍히는걸 확인할수 있다 이렇게 로그가 찍힌 이유는 application.properties보다 환경변수가 더 우선순위에 있기때문에 application.properties의 값은 무시됩니다.

 

VM Optionas

-Dmy.name=SystemProperties

단 환경변수보다 더 우선수위가 높은건 시스템 환경변수이다 VM옵션을 통해 환경변수를 동일하게 설정하면 일반 환경변수보다 우선순위가 높게 설정되어 시스템 환경변수값으로 설정이 됩니다.

 

자동 구성에 Enviroment 프로퍼티 적용

application.properties

contextPath=/app

 

@MyAutoConfiguration  
@ConditionalMyOnClass("org.apache.catalina.startup.Tomcat")  
public class TomcatWebServerConfig {  
  
    @Bean("tomcatWebServerFactory")  
    public ServletWebServerFactory servletWebServerFactory(Environment environment) {  
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();  
        factory.setContextPath(environment.getProperty("contextPath"));  
        return factory;  
    }  
}

application.properties에 환경변수를 설정하고 TomcatServletWebServerFactory을 생성할때 읜존성으로 주입받는 Enviroment의 Property를 확인하여 contextPath를 를설정할 수 있습니다.