ApplicationContext가 가지고 있는 기능들을 살펴보겠습니다.
ApplicationContext 는 Bean Factory 기능 뿐 아니라 다른 기능도 가지고 있습니다.
ApplicationContext는 위 그림과 같이 여러 인터페이스들을 상속받고 있습니다.
오늘은 그중에서도 EnvironmentCapable 에 대해서 정리하겠습니다.
Profile
빈들의 묶음으로 "환경"이라고 할 수 있습니다.
예를 들어 실제 상용에서는 A 환경을 쓰고 테스트할때는 B환경을 쓰려고 할때 이런 환경을 의미합니다.
각각의 환경에서 다른 Bean을 사용해야하는 경우나 특정 Bean을 사용해야하는 경우 Profile을 사용합니다.
아무런 Profile을 설정하지 않은 경우에는 ApplicationContext.getEnvironment().getDefaultProfiles() 를 호출할 경우 default임을 볼 수 있습니다.
해당 Profile인 경우에만 Bean설정이 주입되도록 할 수 있습니다. 특정 Profile로 application을 실행하게 하면 해당 파일이 적용될 수 있습니다.
설정 방법 1
@Configuration @Profile("example")
아래 그림과 같이 "example" 인 Profile인 경우에만 BookRepository Bean주입을 하도록 설정해보겠습니다.
그런 뒤 @Autowired 로 의존성을 주입하게 되면
아래와 같은 에러가 발생합니다. 이는 BookResitory라는 Bean을 찾을 수 없기 때문입니다.
BookRespository는 "example" 프로파일인 경우에만 Bean이 주입되기때문입니다.
그렇다면 "example" 프로파일은 어떻게 주입하는지 살펴보겠습니다.
저는 STS를 사용중이므로 STS에서 하는 방법으로 설명드리겠습니다.
Boot Dashboard 에서 현재 프로젝트 우클릭 > Open Config 선택시 아래와 같은 설정 파일이 나오게 됩니다.
이렇게 해서 Profile을 설정할 수 있습니다.
뿐만 아니라 Argument 탭에서 VM arguments 로도 사용가능합니다.
-Dspring.profiles.active="example"
그외에 Profile Class나 Method에서 선언하는 방법은 아래와 같습니다.
설정 방법2
@Component @Profile("example")
설정방법3
@Bean @Profile("example")
프로파일에는 표현식을 사용가능합니다. ! & | 을 사용가능합니다 :)
Property
Application에 등록된 key, value 쌍의 property 에 접근할 수 있는 기능으로 계층적으로 우선순위를 가지고 접근하게 됩니다.
Property 설정
Boot Dashboard > open config > Arguments 에서
-Dapp.name=spirng5 로 설정합니다.
이렇게 하면 envrionment 에서 getProperty 메소드를 사용해 접근할 수 있습니다.
이 방법 외에 properties 파일을 생성하여 설정하는 방법도 있습니다.
/resource 폴더 하위에 app.properties 파일을 생성하여 아래와 같이 설정해주면 됩니다.
두가지 방법 중에서 더 우선 순위를 가지는 것은 VM argument를 통한 설정입니다.
'Java > Spring Framework' 카테고리의 다른 글
MessageSource (0) | 2021.02.03 |
---|---|
ApplicationEventPublisher & ResourceLoader (0) | 2020.10.25 |
Scope (0) | 2020.10.19 |
Autowired & Component (0) | 2020.10.18 |
기본 개념 Spring (0) | 2020.10.15 |