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

3 篇文章 0 订阅
一、话不多说,直接上错误信息:
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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不喜欢吃猫的鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值