Spring Configration 스프링 설정 properties 또는 yml을 쓴다하더라도 동일하게 작동한다.
application.yml 셋팅1 2 configuration: projectName : Spring Boot
normal case
Application.java1 2 3 4 5 6 7 8 9 10 public class Application { public static void main(String[] args) { new ClassPathXmlApplicationContext("classic.xml"); } public void setConfigurationProjectName(String pn) { LogFactory.getLog(getClass()).info("the configuration project name is " + pn); } }
위와같이 실행이 the configuration project name is Spring Framework 결과를 얻을 수 있다.
여러가지 방법으로 스프링 properties가져오기
resource folder 밑에 some.properties 생성1 configuration.projectName=Spring Framework 테스트
Application.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 // 1번 @Configuration @PropertySource("some.properties") public class Application { private final Log log = LogFactory.getLog(getClass()); public static void main(String[] args) throws Throwable { new AnnotationConfigApplicationContext(Application.class); } // 2번 @Bean static PropertySourcesPlaceholderConfigurer pspc() { return new PropertySourcesPlaceholderConfigurer(); } // 3번 @Value("${configuration.projectName}") private String fieldValue; // 4번 @Autowired Application(@Value("${configuration.projectName}") String pn) { log.info("Application constructor: " + pn); } // 5번 @Value("${configuration.projectName}") void setProjectName(String projectName) { log.info("setProjectName: " + projectName); } // 6번 @Autowired void setEnvironment(Environment env) { log.info("setEnvironment: " + env.getProperty("configuration.projectName")); } // 7번 @Bean InitializingBean both(Environment env, @Value("${configuration.projectName}") String projectName) { return () -> { log.info("@Bean with both dependencies (projectName): " + projectName); log.info("@Bean with both dependencies (env): " + env.getProperty("configuration.projectName")); }; } @PostConstruct void afterPropertiesSet() throws Throwable { log.info("fieldValue: " + this.fieldValue); } }
@PropertySourcePlaceholderConfigure는 BeanFactoryPostProcessor의 구현체이다. 스프링 생명 주기에서 ‘초기에’ 호출되어 하므로 static으로 빈을 등록해야한다.
3번 처럼 @Value픞 클래스 필드에 사용이 가능 4번 처럼 생성자에 파라미터 사용 가능 5번 처럼 겟셋이 가능 6번 처럼 스프링 Enviroment 객체를 통해 속성값을 직접 가져올수 있다. 7번 처럼 @Value를 @Bean이 붙은 메소드의 파라미터에 사용할수 있다.
- 참고 클라우드 네이티브 자바 3장