본문 바로가기

Spring/Spring Boot

(SpringBoot) 프로파일

프로파일 : 특정한 프로파일에서만 특정 빈을 등록하고 싶을 때 혹은 특정 프로파일 때 다르게

빈 설정을 하고 싶을 때 사용

 

 

prod라는 profile 생성

@Profile("prod")
@Configuration
public class BaseConfiguration {

    @Bean
    public String hello() {
        return "hello";
    }
}

test라는 profile 생성

@Profile("test")
@Configuration
public class TestConfiguration {

    @Bean
    public String hello() {
        return "hello";
    }
}

에러 발생

@Component
public class SampleListener implements ApplicationRunner {
    
    @Autowired
    private String hello;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("===========================");
        System.out.println(hello);
        System.out.println("===========================");
    }
}

어떠한 프로파일에 대한 빈을 Autowired 해야 할지 모르기 때문이다.

 

설정 파일에 프로파일을 명시해주어야 한다.

spring.profiles.active=prod

외부에서 profile 설정을 바꾸기 위해서는 어떻게 해야 할까?

4순위 우선순위를 가지는 커맨드 라인 아규먼트를 활용하면 된다.

 

maven package 실행

mvn clean package

jar의 profile 설정을 test로 변경

java -jar target/springinit-0.0.1-SNAPSHOT.jar --spring.profiles.active=test

실행결과


(application-프로 파일명. properties)

두 가지 properties 파일을 생성

 

choi.name=choi prod

choi.name=choi test

각각 name의 값을 변경하는 설정을 다르게 준다.

 

현재 application.properties의 name 설정은 

choi.name = junwoo로 설정되어 있다.

 

 

패키징 이후 prod 프로파일로 실행을 하면

기본 설정인 junwoo가 아닌

application-prod.properties 설정인 choi prod가 찍힘을 알 수 있다.

 

 

 

이 말은 즉슨 application-prod.properties 우선순위가 높다는 것을 알 수 있다.

 

더보기

패키징 하지 않고 실행하는 방법

--spring.profiles.active=prod

 

 


하나의 profile을 실행하면서 다른 profile의 설정의 내용을 포함해서 실행하고 싶을 때

include를 사용하면 된다.

 

현재 Program Arguments 설정이 prod로 설정되어있다.

prod 내부에는 include로 proddb가 설정되어 있다.

full-name을 proddb3로 변경하는 설정이 들어있음
실행결과 proddb3가 찍히는 것을 볼 수 있다.


정리

  • 프로파일 설정은 기본 설정 파일보다 우선순위가 높다.
  • 프로파일 설정을 적용하기 위해선 jar파일을 패키징 후 적용해야 한다.
  • 프로파일 설정을 적용할 때 다른 프로파일의 설정과 함께 적용하고 싶을 땐 inclue를 사용하면 된다.

코드 참조

https://github.com/mike6321/Spring/tree/master/SpringBoot/springinit

 

mike6321/Spring

Contribute to mike6321/Spring development by creating an account on GitHub.

github.com

 

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

(SpringBoot) logging(2) - 커스터마이징  (0) 2020.01.05
(SpringBoot) Logging  (0) 2020.01.05
(SpringBoot) 외부설정(2)  (0) 2020.01.04
(SpringBoot) 외부설정(1)  (0) 2020.01.04
(SpringBoot) SpringApplication(2)  (0) 2020.01.03