profile은 개발환경의 profile로 개발환경, 테스트환경, 서비스환경마다 다르게 프로필을 정의해서 설정하고 싶을때 사용하는 기능임.
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationContext context;
@Override
public void run(ApplicationArguments args) throws Exception {
Environment env = context.getEnvironment();
System.out.println(Arrays.toString(env.getActiveProfiles()));
System.out.println(Arrays.toString(env.getDefaultProfiles()));
env.getProperty("app.name");
}
}
ApplicationContext 안에는 Environment타입의 필드가 있는데, context.getEnvironment()로 꺼내와서 살펴볼 수 있다.
@Configuration
@Profile("test") //프로파일 환경의 이름
public class TestConfiguration {
//test프로파일 일때만 빈설정파일이 적용되어서 다른프로파일에서는 TestBookRepository를 주입받을 수 없음
@Bean
public BookRipository bookRipository(){
return new TestBookRepository();
}
}
코드에서 보다싶이 @configuration어노태이션이 달린 자바 설정파일에 붙이면, 해당 설정파일은 해당 프로필일 때만 작동하게 된다. 따라서 testBookRepository빈은 test프로파일 일 때만 주입 받을 수 있다.
그러면 해당이름의 프로파일로 동작 시키겠다는 의미. 따라서, @Profile("{프로파일이름}")의 프로파일 설정이 작동하게 된다.
그림두장에서 보다싶이 edit configurations를 누르고
vm option에 -Dspring.profiles.active="test"라고 쓰면 환경설정이 된다.
key = value로 된 환경마다 설정값이 다르게 설정할 수 있는 값으로 test환경이나 dev환경, service환경마다 다르게 무언가를 설정하고 싶을 때 사용하게 된다.
환경 변수를 설정하는 방법은 두가지가 있는데,,,
vm option에 -Dkey=value로 key,value값을 넘겨주면 됨.
일단은, 읽어올 .properties파일을 알려줘야 한다. 어떻게?
@SpringBootApplication
@PropertySource("classpath:/app.properties")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SprinngBootApplication이 달린 스프링부트 어플리케이션에다가 @PropertySource("classpath:/app.properties") 어노태이션을 달아준다.
classpath:는 target의 classes파일을 가르킴
가져오는 방법도 역시 두가지가 있다...
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationContext context;
@Value("{app.name:""}")
String appName;
}
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationContext context;
@Override
public void run(ApplicationArguments args) throws Exception {
Environment env = context.getEnvironment();
env.getProperty("app.name");
}
}