본문 바로가기

Java/Spring Boot

@Profile(각 환경별로 등록할 스프링 빈 분리)

@Profile 을 사용하면 각 환경 별로 외부 설정 값을 분리하는 것을 넘어서, 등록되는 스프링 빈도 분리할 수 있다

만약에 프로필에 따라 빈 등록이 변경되어야 한다면?

예를 들어서 기능을 붙여야 하는데, 로컬 개발 환경에서는 실제 결제가 발생하면 문제가 되니 가짜 결제 기능이 있는 스프링 빈을 등록하고, 운영 환경에서는 실제 결제 기능을 제공하는 스프링 빈을 등록한다고 가정해보자

config 파일에서 @Profile 사용


@Slf4j
@Configuration
public class PayConfig {

    @Bean
    @Profile("default")
    public LocalPayClient localPayClient(){
        log.info("LocalPayClient 빈 등록");
        return new LocalPayClient();
    }

    @Bean
    @Profile("prod")
    public ProdPayClient prodPayClient(){
        log.info("ProdPayClient 빈 등록");
        return new ProdPayClient();
    }
}

ApplicationRunner 인터페이스를 사용하면 스프링은 빈 초기화가 모두 끝나고 애플리케이션 로딩이 완료되는 시점에 run(args) 메서드를 호출해준다.

(테스트시 사용되는 클래스 예시)

package hello.pay;

import lombok.RequiredArgsConstructor;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class OrderRunner implements ApplicationRunner {

    private final OrderService orderService;


    @Override
    public void run(ApplicationArguments args) throws Exception {
        orderService.order(1000);
    }
}

'Java > Spring Boot' 카테고리의 다른 글

프로메테우스, 그라파나 : 모니터링 도구  (0) 2023.09.24
프로덕션 준비 기능 - Actuator  (0) 2023.09.23
YAML  (0) 2023.09.23
내부설정파일 통합  (0) 2023.09.22
Auto Configuration(자동구성)  (0) 2023.09.21