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)
}