Table of contents
프로파일
프로파일을 지정하면 해당 프로파일에서만 특정한 빈을 등록하는 것처럼 애플리케이션의 동작을 다르게 수행할 수 있다. @Profile의 value 속성에 프로파일명을 명시함으로써 해당 프로파일에서만 특정 작업을 수행한다.
Profile 애노테이션은 어디에?
@Configuration 혹은 @Component가 지정된 빈에 @Profile을 지정할 수 있다.
@Profile("prod")
@Configuration
public class BaseConfiguration {
@Bean
public String hello() {
return "hello:";
}
}
@Profile("test")
@Configuration
public class TestConfiguration {
@Bean
public String hello() {
return "test:";
}
}
어떤 프로파일을 활성화 할 것인가?
spring.profiles.active
properties 파일에서 spring.profiles.active를 이용하여 활성화할 프로파일을 지정할 수 있다.
# application.properties
jch.name = jcheolho
jch.age = ${random.int(0,100)}
jch.full_name = ${jch.name} Jung
jch.sessionTimeout = 25s
# 프로파일 지정
spring.profiles.active = prod
외부설정 우선순위 에서 공부한 것처럼 우선순위가 높은 방법으로 spring.profiles.active을 지정할 수도 있다. (jvm 옵션, program arguments 등)
프로파일용 프로퍼티
application-{profile}.properties
프로파일 전용 properties 파일을 만들 수 있다. application-prod.properties, application-test.properties 와 같이 -뒤에 프로파일명으로 properties 파일을 생성한다.
# application.properties
jch.name = jcheolho
jch.age = ${random.int(0,100)}
jch.full_name = ${jch.name} Jung
jch.sessionTimeout = 25s
spring.profiles.active = prod
# application-prod.properties
jch.name = jch prod
# application-test.properties
jch.name = jch test
@Component
public class SampleListener implements ApplicationRunner {
@Autowired
private String hello;
@Autowired
JchProperties jchProperties;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("-------------");
System.out.println(jchProperties.getName());
System.out.println(hello);
System.out.println("-------------");
}
}
getName() 메소드는 prod 프로파일이 활성화된 경우 "jch prod", test 프로파일이 활성화된 경우 "jch test"가 반환될 것이다.
어떤 프로파일을 추가할 것인가?
spring.profiles.include
spring.profiles.include를 이용해서 다른 프로파일의 properties를 가져올 수 있다.
# application-prod.properties
jch.name = jch prod
spring.profiles.include=proddb
# application-proddb.properties
jch.full-name = dbdbdb
prod 프로파일에서는 getFullName()이 proddb 프로파일의 "dbdbdb"로 덮어씌워져 반환될 것이다.
해당 포스팅은 스프링 부트 개념과 활용 강의 내용을 토대로 작성하였습니다.