BaseConfig.class
@Profile("prod")
@Configuration
public class BaseConfig {
@Bean
public String hello(){
return "hello";
}
}
TestConfig.class
@Profile("test")
@Configuration
public class TestConfig {
@Bean
public String hello(){
return "test";
}
}
ApplicationRunner.class
@Component
public class ApplicationRunner implements ApplicationRunner {
@Autowired
private String hello;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("==========");
System.out.println(hello);
System.out.println("==========");
}
application.properies
spring.profiles.active=prod
spring.profiles.active=prod로 설정했기 때문에 BaseConfig.class 가 적용됨
결과:
java -jar target/DeanApplication-0.0.1-SNAPSHOT.jar --spring.profile.active=test
결과 :
command Line arguments 가 우선순위가 높다.
application-{profile}.properties의 우선순위가
application.properties 보다 높다.
AplicationRunner.class
@Component
public class ApplicationRunner implements org.springframework.boot.ApplicationRunner {
@Autowired
DeanProperties deanProperties;
@Autowired
private String hello;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("==========");
System.out.println(hello);
System.out.println("name-property :" + deanProperties.getName());
System.out.println("==========");
DeanProperties.class
@Getter
@Setter
@Component
@ConfigurationProperties("dean")
public class DeanProperties {
private String name;
private int age;
private String fullname;
}
기존 application.properties 가 실행되는데, 이때 spring.profiles.active=prod 의 prod 설정이 application-prod.properties를 불러옴.
application.properties
dean.name = dean
dean.age = ${random.int(0,100)}
dean.fullname = ${dean.name} Oh
spring.profiles.active=prod
application-prod.properties
dean.name= dean prod
application-test.properties
dean.name= dean test
java -jar target/DeanApplication-0.0.1-SNAPSHOT.jar
실행결과
java -jar target/DeanApplication-0.0.1-SNAPSHOT.jar --spring.profiles.active=test