티스토리 뷰
1. 개발환경 : Spring 4.2.8, java 1.8
2. @Value("${aaa.bbb}") 로 값을 할당하는 String 변수를 만든다.
private String prop_val;
: prop_val의 값이 "${aaa.bbb}"로 출력된다. property 파일에 등록된 값이 주입되지 않은 것이다.
3. AppConfig.java 설정파일에 application.property 파일을 연결한다.
: prop_val의 값이 여전히 "${aaa.bbb}"로 출력된다.
4. PropertySourcesPlaceholderConfigurer를 Bean으로 등록한다.
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
: prop_val의 값이 property 파일에 등록된 값을 갖는다.
4-1. 그러나 property 파일에 설정된 값이 한글인 경우 prop_val의 값을 출력하면 깨진 문자가 나타난다.
: 여기저기 살펴보았는데 아래처럼 하면 된다는 포스팅이 많았다.
(참고: https://stackoverflow.com/questions/25325892/propertysource-and-utf-8-properties-file)
그러나 버전의 문제인지 내 소스의 @PropertySource 인터페이스에는 encoding이란 속성이 없었다.
: 그래서 찾아낸 방법은 @PropertySource 부분을 제거하고 PropertySourcesPlaceholderConfigurer만을 사용하는 것이다.
(참고: https://m.blog.naver.com/junsu60/220422158206)
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer prop = new PropertySourcesPlaceholderConfigurer();
prop.setLocation(new ClassPathResource("properties/application.properties"));
prop.setFileEncoding("UTF-8");
return prop;
}
5. prop_val 값이 여전히 property 파일에 등록된 값으로 출력되지 않는다. 그런데 "${aaa.bbb}"이 아니라 null로 출력된다.
: prop_val이 static 변수인지 확인한다.
(참고 : https://jiyeonseo.github.io/2016/08/27/spring-inject-static-variables/)
반드시 static 변수로 사용해야 하는 경우에는 get, set 메소드를 통해 값을 할당할 수 있다.
private static String prop_val;
@Value("${aaa.bbb}")
public void setPropVal(String val) {
prop_val = val;
}
public String getPropVal() {
return prop_val;
}
6. 기타 참조했던 사이트
https://kingbbode.tistory.com/39
'Spring' 카테고리의 다른 글
DI (Dependency Injection) : 의존성 주입 (0) | 2019.03.08 |
---|