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를 를설정할 수 있습니다.
'Spring > 인프런 토비의 Spring Boot' 카테고리의 다른 글
섹션 8-4 [외부 설정을 이용한 자동 구성] 프로퍼티 클래스의 분리 (0) | 2024.07.26 |
---|---|
섹션 8-3 [외부 설정을 이용한 자동 구성] @Value와 PropertySourcesPlaceholderConfigurer (0) | 2024.07.26 |
섹션 8-1 [외부 설정을 이용한 자동 구성] Enviroment 추상화와 프로퍼티 (0) | 2024.07.26 |
섹션 7-6 [조건부 자동구성] 스프링 부트의 @Conditional (0) | 2024.06.27 |
섹션 7-5 [조건부 자동구성] 자동 구성 정보 대체하기 (0) | 2024.06.27 |