스프링 부트에서 프로파일을 지정해 보자
지금부터 설명할 내용은 아래 doc 문서에서 확인할 수 있다.
https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/htmlsingle/#boot-features-profiles
일단 prod와 test환경으로 application을 실행했을 때 각각의 환경에 맞는 설정 파일을 사용하도록 해볼 것이다.
먼저 properties파일에 프로파일을 지정해 보자
아래와 같이 spring.profiles.active에 prod나 test와 같이 사용할 환경을 지정해 주면 된다.
my.name = hongjun
spring.profiles.active=prod
properties에 프로파일을 지정했으므로 이제 @Configuration을 이용한 class파일을 생성해 보자
prod에서 사용할 BaseConfiguration파일과 test에서 사용할 TestConfiguration을 생성할 것이다.
@Profile("prod")
@Configuration
public class BaseConfiguration {
@Bean
public String hello() {
return "hello";
}
}
<BaseConfiguration.java>
@Profile("test")
@Configuration
public class TestConfiguration {
@Bean
public String hello() {
return "hello test";
}
}
<TestConfiguration.java>
두 개 파일의 다른 점은 @Profile에서 prod와 test 환경을 지정해 준 점, 그리고 각각 리턴 문자열을 다르게 한 2가지 차이점이 있다.
이제 결과를 프로파일의 적용 여부를 확인할 수 있도록 ApplicationRunner구현체를 만들어 보자
@Component
public class SampleRunner implements ApplicationRunner {
@Autowired
private String hello;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("============================");
System.out.println(hello);
System.out.println("============================");
}
}
이제 프로젝트를 컴파일하고 실행해보자. 어떤 결과가 나올까?
결과는 아래와 같다.
. properties에서 'spring.profiles.active=prod'으로 지정하여 아래와 같은 결과가 나온다.
'spring.profiles.active=test'로 지정하면 어떤 결과가 나오는지도 확인해 보자.
이번에는 prod, test환경에서 사용할 properties파일을 별도로 생성해 보자.
my.name = hongjun prod
spring.profiles.include=proddb
<application-prod.properties>
my.name = hongjun test
<application-test.properties>
my.full-name = hongjun proddb
<application-proddb.properties>
'application-prod.properties'와 같이 특정 환경을 나타내도록 파일명을 생성할 경우 'application.properties'파일보다 우선순위가 높게 지정 된다.
properties의 우선순위에 관한 내용은 이전 포스팅을 참조하자.
https://steady-hello.tistory.com/33
환경 변화에 따른 값 변화를 확인 하기 위해 SampleRunner클래스를 수정해보자.
@Component
public class SampleRunner implements ApplicationRunner {
@Autowired
private String hello;
@Autowired
private MyProperties myProperties;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("============================");
System.out.println(hello);
System.out.println(myProperties.getName());
System.out.println(myProperties.getFullName());
System.out.println("============================");
}
}
MyProperties에 관한 내용은 이전 포스팅을 참조 하거나 글 가장 아래에 있는 github 소스 링크에서 확인 하자.
일단 실행 결과를 쉽게 확인 하기 위해 mvn 명령어를 사용 해보도록 하겠다.
mvn명령어를 통해 프로젝트를 컴파일 하자.
mvn clean package -DskipTests
그리고 각각 아래와 같이 명령어를 실행하면 된다.
- prod 실행
java -jar spring-boot-getting-start-1.0-SNAPSHOT.jar --spring.profiles.active=prod
- test 실행
java -jar spring-boot-getting-start-1.0-SNAPSHOT.jar --spring.profiles.active=test
옵션에서 지정된 값은 최우선순위 이기 때문에 소스 내에서 설정 하였던 'spring.profiles.active'의 값은 무시 된다.
아래 결과는 prod로 지정하여 실행했을때의 결과이다.
git 소스 : https://github.com/hongjun423/spring-boot-study-start/tree/c73cadda0b182d4bed71d78efcfbf9633e2ebafa
해당 포스팅은 백기선님의 인프런 강좌를 참고하여 작성하였습니다.
'Java & 스프링 > 스프링부트 톺아보기' 카테고리의 다른 글
[스프링 부트] 로깅 - Logback 커스텀 설정 파일 사용 하기 (0) | 2019.10.07 |
---|---|
[스프링 부트] 로깅 (0) | 2019.10.07 |
[스프링 부트] 외부 설정 적용하기(2) (0) | 2019.09.25 |
[스프링 부트] 외부 설정 적용 하기 (0) | 2019.09.24 |
[스프링부트] 이벤트 리스너 (0) | 2019.09.24 |
댓글