티스토리 뷰
Spring Boot 를 사용한 프로젝트 중에
application.properties 에 설정 값을 추가 한 후 클래스에서
@Value 어노테이션을 사용하여 개발하려고 하는데
@Value 어노테이션을 선언한 변수가 계속해서 null 이 떨어지는 현상이 발생되었다.
application.properties 파일과 class 파일은 아래와 같이 코딩되어있다.
- application.properties
file.upload.path.tmp = D:/upload/tmp
file.upload.path = D:/upload
- 호출 class
public class TestClass {
.... 생략 .....
String tmpPath = FileUtil.makeTmpFilePath("/1depth/2depth");
}
public class FileUtil {
@Value("${file.upload.path.tmp}")
public static String tmpUploadPath;
public static String makeTmpFilePath(String paths) {
return tmpUploadPath.concat(paths);
}
}
대략 위의 내용처럼 코딩하였다. 그런데 FileUtil.makeTmpFilePath 에 의해 리턴된 값을 찍어보면 항상 아래처럼 찍힌다.
null/1depth/2depth
결론부터 얘기하자면, FileUtil 의 @Value 로 선언 된 tmpUploadPath 가 정적변수가 원인....
@Value("${file.upload.path.tmp}")
public static String tmpUploadPath;
스프링에서는 정적변수로 선언된 변수에는 injection 할 수 없다고 한다.
그렇기 때문에 static 을 삭제 한 다음 그에 맞게 사용하거나 꼭 static 으로 해야겠다 싶으면...
먼저 클래스를 @Component 로 등록 후....
private static String tmpUploadPath;
@Value("${file.upload.path.tmp}")
public void setTmpUploadPath(String path) {
tmpUploadPath = path;
}
이런식으로 setter 를 사용하여 injection 후 사용해야 한다.
위 소스를 정리 하자면...
@Component
public class FileUtil {
private static String tmpUploadPath;
@Value("${file.upload.path.tmp}")
public void setTmpUploadPath(String path) {
tmpUploadPath = path;
}
public static String makeTmpFilePath(String paths) {
return tmpUploadPath.concat(paths);
}
}
이런식이 되겠다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 성계 투어
- 킹덤 호텔
- aguas calientes
- 쿠스코
- Namibia
- 우유니
- calama
- Uyuni
- 마추피추
- 남미 저가항공
- 볼리비아
- Cusco
- 햄버거
- 애드센스
- 남미
- 후마리
- 나미비아
- 캄보디아
- 토레스 델 파이네
- 빅토리아폴스
- 족발
- 푸에르토 나탈레스
- Oracle
- 빈트후크
- Cambodia
- 칠레
- jQuery
- 성스러운 계곡
- 아구아스 칼리엔테스
- 칼라마
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함