참고문헌

EnvironmentCapable

  • ApplicationContext가 상속받는 인터페이스
  • 프로파일과 프로퍼티를 다루는 인터페이스
  • getEnvironment()

    image

프로파일

  • 빈들의 그룹, 묶음
  • 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")
  • 컴포넌트 스캔을 하면서 적용됨

    image

2. 메소드에 정의

  • @Bean @Profile("test")

프로파일을 변경하기

  1. IDE에서 지원하는 방식 사용 image

  2. VM Option에 설정 image

  3. @ActiveProfiles (테스트용)

프로파일 표현식

  1. ! : not image
  2. & : and

  3. : or