테스트 환경에서는 a라는 빈을 쓰고 배포 환경에서는 b를 쓰는 등 특정 환경에서 사용할 빈을 바꿔줘야 할 때 사용하는 기능이다.
@ComponentpublicclassAppRunnerimplementsApplicationRunner { @AutowiredApplicationContext ctx; @Overridepublicvoidrun(ApplicationArguments args) throwsException {// EnvironmentCapable 인터페이스에서 가져온 getEnvironment 메서드Environment environment =ctx.getEnvironment();// 현재 등록된 프로파일을 불러온다.System.out.println(Arrays.toString(environment.getActiveProfiles()));// 기본으로 등록된 프로파일을 볼러온다.System.out.println(Arrays.toString(environment.getDefaultProfiles())); }}
[]
[default]
현재 등록한 프로파일은 없으며 기본으로 default 라는 이름의 프로파일이 등록되어 있다.
@ComponentpublicclassAppRunnerimplementsApplicationRunner { @AutowiredApplicationContext ctx;// 주입할 수 없다. @AutowiredBookRepository bookRepository; @Overridepublicvoidrun(ApplicationArguments args) throwsException {// EnvironmentCapable 인터페이스에서 가져온 getEnvironment 메서드Environment environment =ctx.getEnvironment();// 현재 등록된 프로파일을 불러온다.System.out.println(Arrays.toString(environment.getActiveProfiles()));// 현재 기본으로 등록된 프로파일을 볼러온다.System.out.println(Arrays.toString(environment.getDefaultProfiles())); }}
BookRepository가 빈으로 등록되지 않았으므로 당연히 주입도 받을 수 없다.
설정 방법
IDE의 Run/Debug Configuration 메뉴에서 Active profiles에 프로파일 이름을 써준 뒤 아래와 같이 작성한다.
@SpringBootApplication// properties 파일 주소 설정@PropertySource("classpath:/app.properties")publicclassDemoApplication {publicstaticvoidmain(String[] args) {SpringApplication.run(DemoApplication.class, args); }}
@ComponentpublicclassAppRunnerimplementsApplicationRunner { @AutowiredApplicationContext ctx; @AutowiredBookRepository bookRepository; @Overridepublicvoidrun(ApplicationArguments args) throwsException {// EnvironmentCapable 인터페이스에서 가져온 getEnvironment 메서드Environment environment =ctx.getEnvironment();// 설정한 VM 옵션을 출력한다.System.out.println(environment.getProperty("app.name"));// properties 파일르 설정한 값을 출력한다.System.out.println(environment.getProperty("app.about")); }}
spring5
spring
properties의 값이 출력되었다.
만약 app.name 이라는 같은 키로 설정되었다면 우선 순위는 properties 파일보다 VM option이 높다.