앞서 자동구성정보가 설정되는 방식을 공부해 보았습니다.
자동 구성 정보
는 스프링 부트가 개발자가 편리하게 개발을 하라고 설정해 주는 것입니다.
이때 개발자는 커스텀 @Bean을 설정하여 자동 설정 구성을 선택할 수 있다는 것을 배웠습니다.
외부 설정 정보(
.Properties
)의 값을 가지고, 자동 설정정보를 수정 할 수있습니다.
아래와 같은 방법이 있습니다.
아주 익숙한 application.yml
이 보입니다!
Environment.getProperty("property.name")
을하면 Properties 값들을 읽어옵니다.
스프링부트 애플리케이션이 처음 실행되고 Bean
의 등록이 끝난 시점에 특정한 코드나 동작을 수행하고자 할 때가 있습니다.
이때 사용할 수 있는 인터페이스가 Application Runner
입니다.
즉, 초기화 작업 또는 컨테이너의 기능을 통해 간단히 확인을 해야한다면 자주 사용하게 됩니다.
@FunctionalInterface
public interface ApplicationRunner {
/**
* Callback used to run the bean.
* @param args incoming application arguments
* @throws Exception on error
*/
void run(ApplicationArguments args) throws Exception;
}
@Bean
ApplicationRunner applicationRunner(Environment env) {
return args -> {
String name = env.getProperty("my.name");
System.out.println("my.name: " + name);
};
}
환경변후를 읽어와 출력하는 코드입니다.
application.properties
에 환경변수를 추가해 보겠습니다.
my.name=ApplicationProperties
출력이 잘 되고있습니다!
애플리케이션의 Default가 될만한 정보들은 application.properties
에 환경변수를 추가하여 사용하면 됩니다!
tomcat의 설정도 변경 할 수 있습니다.
Environment를 주입받아, path설정을 하였습니다.
Environment는 application.properties
와 일치하는 key에서 읽어옵니다.
@MyAutoConfiguration
@ConditionalMyOnClass("org.apache.catalina.startup.Tomcat")
public class TomcatWebServerConfig {
@Bean("tomcatWebServerFactory")
@ConditionalOnMissingBean // 같은 타입의 Bean이 없다면 생성해라
public ServletWebServerFactory servletWebServerFactory(Environment env){
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.setContextPath(env.getProperty("contextPath")); // application.properties에서 읽어옵니다.
return factory;
}
}
application.properties
contextPath=/app
기본 설정이 /
-> /app
으로 변경되었습니다!
테스트에도 URL을 변경하여야 합니다!