使用springboot项目打成jar包后运行出现获取不到resources下的模板文件

一、话不多说,直接上错误信息:
cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/opt/XXXX.jar!/BOOT-INF/classes!/template/%e4%bf%a1%e6%81%af%e6%8a%80%e6%9c%af%e5%ae%89%e5%85%a8%e4%ba%8b%e4%bb%b6%e6%83%85%e5%86%b5%e6%8a%a5%e5%91%8a%e6%a8%a1%e6%9d%bf(%e6%96%b0-%e4%bf%a1%e6%81%af%e7%b3%bb%e7%bb%9f%e5%ae%89%e5%85%a8%e4%ba%8b%e4%bb%b6).doc
二、问题描述:

      项目通过打成jar包并做成docker镜像使用docker-compose方式运行在centos服务器上,项目在本地使用idea正常运行并且能够正常的下载对应文件,但是在服务器上运行对应的jar包却出现了以上问题,一直提示说文件不在文件系统之中。

三、定位问题:

1 、首先从错误日志可以看出这个文件并不是没有,而是在拿到这个文件的绝对路径后去文件系统中寻找这个文件找不到所以抛出异常;
2、文件首先我是确定了是在resources/template目录下的,项目编译后在classes目录下模板文件也是存在的,此时的我就有点蒙圈了。
获取文件具体代码如下:

 org.springframework.core.io.Resource resource = (org.springframework.core.io.Resource) new ClassPathResource("template/"+templateFileName);

获取到文件后直接通过: resource.getFile().getPath()方法获取到文件的绝对路径然后通过aspose.words包下的Document去生成一个word模板

 Document doc = new Document(templateFilePath);

最后运行代码调用方法就抛出以上异常。

四、排除问题:

1、替换获取文件方式,采用以下方式:

String path = this.getClass().getClassLoader().getResource("/template/"+fileName).getPath();

这样拿到的文件路径然后继续构建word文件,依然是出现上面的问题…
2、于是乎疯狂google了一番,bing、csdn、stackoverflow上找了许久,后面在stackoverflow上看到某大佬也遇到类似的问题,建议说不直接操纵源文件。于是我将文件复制到临时文件中后续的操作都是对临时文件进行操作,修改代码重新编译 打包镜像部署服务一气呵成…
3、打开chrome输入地址验证验证成功!!!!

五、长记性!!!

1、长记性!!!

2、长记性!!!

3、长记性!!!
重要的话说三遍!

反思

还是经验不足,应该多学习。

本文如若有不妥之处,请及时联系我进行更正,以便误导。

1、QQ:646116940;
2:探讨群:976519455

你可能感兴趣的:(java,运维,java,后端,springboot)