프로파일 : 특정한 프로파일에서만 특정 빈을 등록하고 싶을 때 혹은 특정 프로파일 때 다르게
빈 설정을 하고 싶을 때 사용
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 우선순위가 높다는 것을 알 수 있다.
패키징 하지 않고 실행하는 방법
하나의 profile을 실행하면서 다른 profile의 설정의 내용을 포함해서 실행하고 싶을 때
include를 사용하면 된다.
현재 Program Arguments 설정이 prod로 설정되어있다.
prod 내부에는 include로 proddb가 설정되어 있다.
정리
- 프로파일 설정은 기본 설정 파일보다 우선순위가 높다.
- 프로파일 설정을 적용하기 위해선 jar파일을 패키징 후 적용해야 한다.
- 프로파일 설정을 적용할 때 다른 프로파일의 설정과 함께 적용하고 싶을 땐 inclue를 사용하면 된다.
코드 참조
https://github.com/mike6321/Spring/tree/master/SpringBoot/springinit
'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 |