[스프링 IoC 컨테이너와 빈]_07 Environment 2부. 프로퍼티
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
- 다음과 같이 프로퍼티 설정을 하고 코드에서 설정값을 가져와보자
VM options : -Dapp.name=spring5
- 프로퍼티로 들어온 값을 계층형으로 정리해놓고, 우리는
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
체계적으로 값을 전달하고 싶은 경우
-
app.properties 파일 생성
app.about=spring
-
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); } }
-
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를 쉽게 사용할 수 있는 다양한 기능들을 스프링부트가 지원해준다. (→ 스프링부트 강좌에서)