티스토리 뷰

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
링크
«   2024/04   »
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
글 보관함