티스토리 뷰

카테고리 없음

(SpringBoot) 프로파일

토픽셀프 2020. 2. 15. 15:56

(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

from http://jwdeveloper.tistory.com/88 by ccl(A)

댓글