대머리개발자

스프링 Boot Jar 배포 시 리소스 못 찾는 이슈 본문

개발이야기/자봐

스프링 Boot Jar 배포 시 리소스 못 찾는 이슈

대머리개발자 2021. 10. 29. 10:15
728x90

개발환경에서 정상적으로 구동이 되었으나 Jar 배포를 했더니

java.io.FileNotFoundException: class path resource [defaultFile/defaultOnefficeTemplateFile] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:~~~Boot.jar!/BOOT-INF/classes!/defaultFile/defaultOnefficeTemplateFile

 

구동시 예외가 발생한다. 왜냐!! jar 파일 안에 포함되어 있으니 리소스 경로를 못 찾는 예외 발생!!! 당연한 이야기이다.  개발환경에서는 classPath를 통해서 접근 가능 했으나 jar 배포 환경에서는 똥 ㅠ

 

하고자 했던 부분은 서버 리소스에 Default로 사용하는 기본 파일들을 복사하고자 하는 것이다. 디렉토리 구조까지.

 

기존에는 commons-io에서 제공 해준 FileUtils.copyDirectory 메서드를 통해서  바로 폴더및 파일까지 복사를 했었지만. 다른 접근 방법으로 진행해야 한다. 왜?? 경로를 못찾으니깐!!!!

기본으로 사용하는 폴더 구조와 파일들은 대략 아래와 같다. 폴더 약 100개정도와 파일 300개.

resources -- AA-- CSS 
           |      |-- JS
           | 
           |  -- BB-- dataBinder

           ....

 

 

1. 특정 패턴을 통해서 모든 리소스를 가져온다.

2. 리소스의 getPath를 통해서 리소스 경로를 얻어 온다.

3. getPath를 targetPath로 반을 가른다. 

4. 반을 가른 Path를 확장자 체크를 한다. 없는 경우 Skip

5. 그 외 리소스의 경로를 만들어주고 getInputStream을 통해서 파일을 복사한다.

 

 

# 굳이 targetPath로 반을 나누는 이유는 폴더 경로를 만들기 위한 부분이 targetPath이기 때문이다.

예를들어 AA 폴더를 target으로 잡아서 getPath를 확인해보면 아래와 같다.

file:/~~~Boot.jar!/BOOT-INF/classes!/AA/CSS 로시작한다.

 

따라서 AA를 기준으로 반을 나눠서 뒤쪽을 패스 정보를 활용한다.

관련된 비지니스로직이다.

 

고생고생~

 

 

 

728x90

'개발이야기 > 자봐' 카테고리의 다른 글

R2DBC Redis...  (0) 2023.02.14
JPA + queryDSL 적용기(?)  (0) 2022.04.08
스프링 Boot - MessageSource 적용  (0) 2021.08.28
스프링 Boot - ehcache 적용  (0) 2021.08.24
스프링 Boot전환  (0) 2021.07.16