@Value(classpath)
@Value("classpath:...")를 사용할 때
- JAR 외부 리소스: 외부 파일 시스템에서 리소스를 찾을 수 있으면,
@Value는 파일 경로로 해당 리소스를 로드합니다.- JAR 내부 리소스: JAR 내부에 포함된 리소스는 파일 경로로 직접 접근할 수 없으며,
getInputStream()을 통해 리소스를 읽어야 합니다. Spring은 이 경우 자동으로Resource객체를 통해 리소스를 제공합니다. 리소스는InputStream을 사용해 읽을 수 있습니다.
WAR 배포시
- tomcat 이 WAR 가 해제된 디렉토리의
WEB-INF/classes/(실제 파일 시스템의 경로) 를 클래스패스에 추가 - 리소스에 직접 접근 가능
1@Value("classpath:menu.xml")
2private Resource menuFile;
3
4...
5
6menuFile.getFile()
JAR 배포시
getFile()은File객체를 반환해야 하는데, JAR 내부 파일은 압축되어 있어서 직접File로 변환이 불가getInputStream()를 통해 압축된 JAR 내부에서 리소스를 직접 읽음
1@Value("classpath:menu.xml")
2private Resource menuFile;
3
4...
5
6try (InputStream inputStream = menuFile.getInputStream())...