Springboot打包后,获取不到resource目录下资源文件的报错
1.问题:
java.io.FileNotFoundException
****目录下找不到模板文件
在使用Springboot启动类启动没有错,但是打包放到tomcat、东方通这些外部容器上报错,在目标路径下找不到资源文件。
2.原代码:
配置:
template_relativeJar_path: config
获取配置:
@Value("${spd.template_relativeJar_path}")
private String templateRelativePath;
处理逻辑,获取文件内容转为输入流
ApplicationHome home = new ApplicationHome(getClass());
File templateDir = new File(home.getDir(), templateRelativePath);
File templateFile = new File(templateDir, templateFileName);
return new FileInputStream(templateFile);
3.错误原因:
1.路径问题
资源文件打包前放在某模块的resources/config下,代码中通过FIle类+路径+文件名进行获取。
打war包后,资源文件被放在WEB-INF\lib的-1.0-SNAPSHOT.jar包中,路径为-1.0-SNAPSHOT.jar\config。
但是代码寻找的路径是WEB-INF/lib/config,找不到文件报错。
2.不只是路径问题:
jar包是一个单独的文件而非文件夹,使用File类不能通过****-1.0-SNAPSHOT.jar\config\temp.docx这种形式的URL来定位temp.docx。
4.解决
使用反射或类加载器来获取类的路径,使用getResourceAsStream()获取jar中的资源文件。
● public InputStream getResourceAsStream(String name);
返回指定资源的输入流。直接获得jar包中文件的内容。
5.新代码:
InputStream is = 类名.class.getResourceAsStream("/" + templateRelativePath + "/" + templateFileName);
return is;
或
InputStream is = this.getClass().getResourceAsStream("/" + templateRelativePath + "/" + templateFileName);
return is;
Springboot打包后,获取不到resource目录下资源文件的报错的更多相关文章
- Qt编译目录下exe文件执行报错问题的解决办法
使用Qt5.9.3+vs2017环境,编译项目生成Debug目录,运行其中的exe文件,出现以下错误(qt creator调试状态下或出安装包后是可以运行的): 经过查阅资料,发现是我重新配置Qt开发 ...
- SpringBoot 项目打包后获取不到resource下资源的解决
SpringBoot 项目打包后获取不到resource下资源的解决 在项目中有几个文件需要下载,然后不想暴露真实路径,又没有CDN,便决定使用接口的方式来获取文件.最初的时候使用了传统的方法来获取文 ...
- Spring boot 读取resource目录下的文件
背景:最近做项目重构将以前的ssh + angular js架构,重构为spring boot + vue.项目是一个数据管理平台,后台涉及到多表关联查询,数据导入导出等. 问题:读取resource ...
- springboot 获取Resource目录下的文件
如图,获取user.png: 代码实现: //文件路径,此处static前不能加/,否则解析不到try { //此处的static前不能加/!!! file = ResourceUtils.getFi ...
- Java获取Resource目录下的文件
工程结构: 有两种方式: Java代码中的类,要获取Resource资源文件目录下文件 绝对路径寻址 String s1 = this.getClass().getResource("/te ...
- 读取spring boot项目中resource目录下的文件
在开发中, 我们常常要将我们的配置文件或者模板文件放在我们的resource目录中. 如下 而在spring boot的项目中, 我们运行的是一个jar包, 并没有解压 所以当我们使用以下方式获取文件 ...
- PyChram中同目录下import引包报错的解决办法?
相信很多同学和我一样在PyChram工具中新建python项目的同目录下import引包会报错提示找不到,这是因为该项目找不到python的环境导致的: 如果文件开始的时候包引包的错误可以,都可以用用 ...
- springboot的启动类不能直接放在src/java目录下,不然会报错
jar包的application.yml 会被项目的覆盖,导致找不到原有的配置
- vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token <" 报错
参考链接:https://segmentfault.com/a/1190000016919340
随机推荐
- 织梦DEDECMS网站如何生成xml格式网站地图
这个很简单,按照我下边提供的方法进行操作就可以了,我一直在用 第一步,登陆DedeCMS后台:核心 - 频道模型- 自由列表管理,点击添加列表: 参数按照下边的填写: 自由列表标题:[XML地图] 列 ...
- MySQL的日期类型
-- MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表 3-2 中-- 列出了 MySQL 5.0 中所支持的日期和时间类型.-- 表 3-2 MySQL 中的日期和时 ...
- mysql中 Rank、DENSE_RANK()的区别
相同点:RANK()和DENSE_RANK()的是排名函数 不同点:RANK()是跳跃排序,即如果有两条记录重复,接下来是第三级别 如:1 2 2 4,会跳过3 DENSE_RANK()是连续排序,即 ...
- Docker的iptables规则在iptables重启后丢失
前因后果 1.在跳板机上使用ansible命令测试机器B时,报错如下,于是就怀疑是网络防火墙的问题 10.10.0.86 | FAILED >> { "failed": ...
- Vue 百度地图显示规划路线
Vue 百度地图显示规划路线 1.首选引入相应的文件(建议单页面引入)(如有问题找上一篇博客园) 2.区别就是需要多引入几根不同的文件 import { BaiduMap, BmScale, BmGe ...
- protocbuf的简单理解
之前通信协议替换为protocbuf!新老交替,很多不同看法,也提出来一些负面因数: 1.老的内部通信协议体已经有一段时间了,稳定熟悉! 2.通过通信结构体进行交互,实际上并没有序列化和反序列化的过程 ...
- 【C++】简介
注意:以下内容摘自文献[1],修改了部分内容. 前言 关于软件产业发展史,不妨访问“首次全面深度解密华为方舟编译器”一文,不仅详细介绍了软件产业的发展,还有华为方舟编译器产生的背景,值得一看! 1. ...
- 【图机器学习】cs224w Lecture 13 & 14 - 影响力最大化 & 爆发检测
目录 Influence Maximization Propagation Models Linear Threshold Model Independent Cascade Model Greedy ...
- SSI PAYLOAD
<pre><!--#exec cmd="ls" --></pre><pre><!--#echo var="DATE_ ...
- 树莓派 ubuntu mate 16.04 系统默认软件源
deb http://ports.ubuntu.com/ xenial main restricted universe multiverse deb-src http://ports.ubuntu. ...