지금까진 빈과 빈을 등록하는 방법에 대해 알아봤는데 applicationContext에 대해 더 알아보겠다.
Environment
ApplicationContext는 빈 보관 외 다양한 기능을 갖고있는데 그 중 EnvironmentCapable(ApplicationContext가 EnvironmentCapable를 구현한다)는 두가지 기능을 제공하는 데 그 중 프로파일이라는 기능에 대해 알아보겠다.
프로파일
: 빈들의 묶음이다. 어떤 환경을 의미한다. 즉 각각의 환경에 따라 다른 빈을 써야하는 경우 유용(ex. 테스트 서버에서는 a빈을 쓰겠다.)
1 |
|
위처럼 할 경우 다른곳에서
1 | @Autowired |
위와같이 호출할 경우 BookRepository 빈을 못찾게 된다. 왜? test프로파일 일 때만 실행하도록 설정했기 때문(@Profile(“test”))
그렇다면 프로파일을 설정해보자
IDE에서 Active profile 설정을 줄 수 있다.
해당 옵션이 없으면
VM option에다 -Dspring.profiles.avtive=”test” 와 같이 주면 된다.
TestConfiguration 없이 빈에다 바로 프로파일 설정하는 방법은?
TestConfiguration방법은 불편하긴 하다. @profile를 붙여주자.
1 |
|
프로파일 표현식
! - not
& - and
| - or
위와같이 표현식을 쓸 수 있다.
@Profile(“!prod & test”) 일 경우 prod가 아니고 test인 경우에만 실행되는것이다.
다음과 같이 프로파일을 적용해 보며 확인해볼 수 있다.
1 | @Autowired |
Property
어플리케이션에 등록되어있는 키 밸류 쌍에 접근하는 것으로 계층형으로 접근한다. 프로퍼티는 여러가지 형태로 제공될 수 있는데 OS에 있는 환경변수, 자바 실행할 때의 -D로 넘겨주는 옵션, 서블릿 컨텍스트, 서블릿 콘텍스트 등에도 들어갈 수 있다.
Property 설정방법 1
vm 옵션으로 -Dapp.name=spring5 을 입력하자.
1 | @Autowired |
Property 설정방법 2
application.properties 파일 생성하고 app.name=spring 을 입력하자
1 | @SpringBootApplication |
두 방법을 사용하여 app.name을 설정하여 출력할경우 누가 출력될까
vm 옵션이 이긴다.
아래처럼도 설정이 가능하다.
1 | public class AppRunner implements ApplicationRunner{ |