Environment 추상화와 프로퍼티

Sol's·2023년 6월 1일
0

토비의 스프링 부트

목록 보기
24/31

앞서 자동구성정보가 설정되는 방식을 공부해 보았습니다.
자동 구성 정보는 스프링 부트가 개발자가 편리하게 개발을 하라고 설정해 주는 것입니다.
이때 개발자는 커스텀 @Bean을 설정하여 자동 설정 구성을 선택할 수 있다는 것을 배웠습니다.

프로퍼티

외부 설정 정보(.Properties)의 값을 가지고, 자동 설정정보를 수정 할 수있습니다.

아래와 같은 방법이 있습니다.
아주 익숙한 application.yml이 보입니다!
Environment.getProperty("property.name")을하면 Properties 값들을 읽어옵니다.

스프링 Environment 추상화

스프링부트 애플리케이션이 처음 실행되고 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에 환경변수를 추가해 보겠습니다.

  • application.properties
my.name=ApplicationProperties


출력이 잘 되고있습니다!

잘사용하는법

애플리케이션의 Default가 될만한 정보들은 application.properties에 환경변수를 추가하여 사용하면 됩니다!

Tomcat 환경설정 변경하기

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을 변경하여야 합니다!

profile
배우고, 생각하고, 행동해라

0개의 댓글