_본 글은 백기선님의 스프링부트 개념과 활용강좌를 수강하며 정리한 내용입니다._2
프로파일 설정을 통해 환경에 맞는 설정을 쉽고 빠르게 할 수 있다.
다음 두 설정클래스가 있다고 가정하자.
@Configuration
@Profile("prod")
public class BaseConfiguration {
@Bean
public String hello(){
return "Hello prod";
}
}
@Profile("test")
@Configuration
public class TestConfiguration {
@Bean
public String Hello(){
return "Hello test";
}
}
prod과 test라는 이름의 프로파일 클래스를 등록한 후, application.propeties에서 다음과 같이 설정한다.
spring.profiles.active = prod
활성화 중인 profile을 prod로 등록해 두었기 때문에 String hello를 @Autowired하여 출력해 보면 다음과 같은 결과가 나온다.
@Autowired
private String hello;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("=========================");
System.out.println(hello);
System.out.println("=========================");
}
=========================
Hello prod
=========================
만약 jar파일로 빌드 후 커맨드 라인을 통해 spring.profiles.active를 test로 변경하면 어떻게 될까?
java -jar target/spring-......jar --spring.profiles.active=test
결과는
=========================
Hello test
=========================
처럼 나온다. 이는 커맨드라인 argument를 통해 설정한 프로퍼티값은 application.properties파일에 등록한 값을 overriding하기 때문이다.
이러한 프로파일 설정을 통해 매우 유연하게 다양한 설정을 변경할 수 있다.
스프링부트 외부설정_%EC%99%B8%EB%B6%80%EC%84%A4%EC%A0%95.md)에서 활용한 SamplePropeties.class를 다시 불러와 보자.
SamplePropeties.class
@Data
@Component
@ConfigurationProperties("sample")
@Validated
public class SampleProperties {
private int age;
@NotEmpty
private String name;
@DurationUnit(ChronoUnit.SECONDS)
private Duration sessionTimeout = Duration.ofSeconds(30);
}
또한 application.properties에 다음과 같은 설정이 있었다고 가정하자.