2020-3-28 다시 시작하는 스프링(4) - 프로파일

ApplicationContext Environment profile

  • 특정환경을 정의하기 위해 @Profile이 있는데, ApplicationContext에서 상속하고 있는 EnvironmentCapable의 getEnvironment() 메서드를 통해 사용할 수 있는거다.

프로파일

  • 빈들의 그룹
  • Environment의 역할은 활성화할 프로파일 확인 및 설정

유즈케이스

  • 테스트환경에서는 A라는 빈을 사용하고 배포환경에서는 B라는 빈을 쓰고 싶을때.

프로파일정의

  • 클래스에 정의
  • 메서드정의
@Configuration
@Profile("!prod")
public class Configuration {}

@Component
@Profile("test2")
public class Configuration{

	@Bean
	@Profile("test3")
	public void method() {}
}

  • 위와같은 방식으로 설정을 프로파일 등록을 할 수 있다.
  • !prod와 같이 !prod가 아닌 경우에 등록을 할 수 있도록 설정할 수 있다.
@Component
public class AppRunner implements ApplicationRunner {
    @Autowired
    ApplicationContext 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()));
    }
}

@Configuration
@Profile("test") // testProfile일때만 사용할 수 있다.
public class TestConfiguration {

    @Bean
    public BookRepository bookRepository() {
        return new TestBookRepository();
    }
}

// []
// [default]
  • 일반적으로 profile을 호출하면 default가 나온다.
  • @Profile(“value”)의 경우 해당 환경이 value일때만 저 @Configuration이 동작한다.

Profile지정하기

  • -Dspring.profiles.active=”test”… 옵션을 실행할때 줘야된다.
  • @ActiveProfiles(테스트용);

spring-profile

  • 위의 사진에 VM options에 -Dspring.profiles.active=”value”를 하거나 밑에 Active profiles에 value를 설정하면 된다.
Written on March 28, 2020