Spring Configration

스프링 설정 properties 또는 yml을 쓴다하더라도 동일하게 작동한다.

application.yml 셋팅

1
2
configuration:
projectName : Spring Boot

normal case

Application.java

1
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장