IoC 컨테이너 6부 - Environment 1부. 프로파일
참고문헌
EnvironmentCapable
- ApplicationContext가 상속받는 인터페이스
- 프로파일과 프로퍼티를 다루는 인터페이스
-
getEnvironment()
프로파일
- 빈들의 그룹, 묶음
- Environment의 역할은 활성화할 프로파일 확인 및 설정
프로파일 useCase
- 테스트 환경에서는 A라는 빈을 사용하고, 배포 환경에서는 B라는 빈을 쓰고 싶다.
- 이 빈은 모니터링 용도니까 테스트할 때는 필요가 없고, 배포할 때만 등록이 되면 좋겠다.
프로파일 확인해보기
- 코드
@Component public class AppRunner implements ApplicationRunner { @Autowired Application ctx; @Override public void run(ApplicationArguments args) throws Exception { Environment environment = ctx.getEnvironment(); System.out.println(Arrays.toString(environment.getActiveProfiles())); System.out.println(Arrays.toString(environment.getDefaultProfiles())); } }
- 출력
[] [default]
- 출력
프로파일 정의하기
## 1. 클래스에 정의 ### 1. 직접 configuration 클래스에 등록하기
- @Configuration @Profile("test")
java @Configuration @Profile("test") public class TestConfiguration { @Bean public BookRepository bookRepository() { return new TestBookRepository(); } }
- 다른 프로파일에서는 해당 빈이 등록되어 있지 않기 때문에, 가져올 수 없다
@Component public class AppRunner implements ApplicationRunner { @Autowired Application ctx; @Autowired BookRepository bookRepository; // 프로파일이 디폴트이므로, test 프로파일에 등록된 빈을 못찾음 @Override public void run(ApplicationArguments args) throws Exception { } //실행 시 에러 발생 }
- 다른 프로파일에서는 해당 빈이 등록되어 있지 않기 때문에, 가져올 수 없다
2. 개별 클래스에 프로파일 설정
- @Component @Profile("test")
-
컴포넌트 스캔을 하면서 적용됨
2. 메소드에 정의
- @Bean @Profile("test")
프로파일을 변경하기
-
IDE에서 지원하는 방식 사용
-
VM Option에 설정
-
@ActiveProfiles (테스트용)
프로파일 표현식
- ! : not
-
& : and
-
: or