Application Properties를 이용한 프로파일 사용하기
24 Nov 2019 | SpringBoot프로파일 사용하기
하나의 서비스 인터페이스와 이를 구현하는 서비스 구현체가 여러 개가 있을 때 프로파일을 이용해서 원하는 서비스가 연결되도록 할 수 있습니다.
HelloService.kt
interface HelloService { fun hello(name: String): String }
HelloServiceImpl.kt
class HelloServiceImpl : HelloService { override fun hello(name: String): String { return "Hello, $name" } }
GoodMorningServiceImpl.kt
class HelloServiceImpl : HelloService { override fun hello(name: String): String { return "Hello, $name" } }
기존에는 각 서비스 구현 클래스에 @Service
어노테이션을 붙였지만, 여기서는 붙이지 않았습니다.
대신 Application 클래스안에 Bean 클래스를 명시적으로 생성하도록 합니다.
HelloApplication.kt
@SpringBootApplication class HelloApplication { @Bean fun helloService(): HelloService = HelloServiceImpl() // @Bean // fun goodMorinigServie(): HelloService = GoodMorningServiceImpl() } fun main(args: Array<String>) { runApplication<HelloApplication>(*args) }
위의 주석 부분을 제거하면 서비스가 2개가 되어 실행시 오류가 발생합니다. 이제 Application Properties를 이용해서 선택적으로 인스턴스를 생성하는 부분을 적용합니다.
application.yaml
service: greet: "goodmorning"
HelloApplication.kt(수정 후)
@SpringBootApplication class HelloApplication { @Bean @ConditionalOnExpression("#{'\${service.greet}'=='hello'}") fun helloService(): HelloService = HelloServiceImpl() @Bean @ConditionalOnExpression("#{'\${service.greet}'=='goodmorning'}") fun goodMorinigServie(): HelloService = GoodMorningServiceImpl() } fun main(args: Array<String>) { runApplication<HelloApplication>(*args) }