[스프링 IoC 컨테이너와 빈]_07 Environment 2부. 프로퍼티

1 minute read

Environment 2부. 프로퍼티

프로퍼티
● 다양한 방법으로 정의할 수 있는 설정값
● Environment의 역할은 프로퍼티 소스 설정 및 프로퍼티 값 가져오기

프로퍼티에는 우선 순위가 있다.
● StandardServletEnvironment의 우선순위
○ ServletConfig 매개변수
○ ServletContext 매개변수
○ JNDI (java:comp/env/)
○ JVM 시스템 프로퍼티 (-Dkey=”value”)
○ JVM 시스템 환경 변수 (운영 체제 환경 변수)

@PropertySource
● Environment를 통해 프로퍼티 추가하는 방법

스프링 부트의 외부 설정 참고
● 기본 프로퍼티 소스 지원 (application.properties)
● 프로파일까지 고려한 계층형 프로퍼티 우선 순위 제공


프로퍼티

애플리케이션에서 제공되는 키-값 쌍으로 제공되는 프로퍼티에 접근할 수 있는 기능

계층형으로 접근한다. * 계층형 : 우선순위가 있다.

key-value에는 OS에 접근할 수 있는 환경변수, 자바 애플리케이션을 실행할 때 넘겨주는 프로퍼티 (-D 옵션으로 넘겨주는 값), 서블릿 애플리케이션이라면 ServeltContext에 들어갈 수도 있다.

예시)

VM options : -Dspring.profiles.active="test"
VM options : -Dapp.name=spring5

프로퍼티 설정

프로퍼티 설정 (1) - VM options

  1. 다음과 같이 프로퍼티 설정을 하고 코드에서 설정값을 가져와보자
VM options : -Dapp.name=spring5
  1. 프로퍼티로 들어온 값을 계층형으로 정리해놓고, 우리는 environment.getProperty() 를 이용해서 사용할 수 있다.
@Component
public class AppRunner implements ApplicationRunner {

    @Autowired
    ApplicationContext ctx;
  
    @Override
    public void run(ApplicationArguments args) throws Exception {
        Environment environment = ctx.getEnvironment();
        System.out.println(environment.getProperty("app.name"));
    }
}

프로퍼티설정

프로퍼티 설정 (2) - app.properties

체계적으로 값을 전달하고 싶은 경우

  1. app.properties 파일 생성

    app.about=spring
    
  2. Configuration이 들어있는 소스코드에서 @PropertySource로 파일 경로 지정

    지정한 경로에있는 프로퍼티 소스를 @PropertySource로 Environment에 넣어주면, Environment에서 설정값을 가져와서 사용할 수 있다.

    @PropertySource("classpath:/app.properties")
    
    @SpringBootApplication
    @PropertySource("classpath:/app.properties")
    public class Demospring51Application {
        public static void main(String[] args) {
            SpringApplication.run(Demospring51Application.class, args);
        }
    }
    
  3. environment.getProperty() 로 설정값을 가져올 수 있다.

    @Component
    public class AppRunner implements ApplicationRunner {
       
        @Autowired
        ApplicationContext ctx;
       
        @Override
        public void run(ApplicationArguments args) throws Exception {
            Environment environment = ctx.getEnvironment();
            System.out.println(environment.getProperty("app.name")); //-> spring5
            System.out.println(environment.getProperty("app.about")); //-> spring
        }
    }
    

프로퍼티 설정 (3) - @Value

@Component
public class AppRunner implements ApplicationRunner {

    @Value("${app.name}")
    String appName;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(appName);
    }
}

프로퍼티 우선순위

  • StandardServletEnvironment의 우선순위
    • ServletConfig 매개변수
    • ServletContext 매개변수
    • JNDI (java:comp/env/)
    • JVM 시스템 프로퍼티 (-Dkey=”value”)
    • JVM 시스템 환경 변수 (운영 체제 환경 변수)
  • 우선순위 : VM options > @PropertySource

properties를 쉽게 사용할 수 있는 다양한 기능들을 스프링부트가 지원해준다. (→ 스프링부트 강좌에서)