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
随机推荐
- css变量的使用
css变量的使用 1.介绍:我们也可以在css中定义变量,和less.sass一样,通过--来定义变量 div { /* 开始定义变量 */ --color: red; /* 通过var()函数来使用 ...
- [wordpress使用]002_主题
使用WordPress作为博客内容管理系统有一个很大的好处是,WordPress拥有大量的优秀的免费模板.你所需要的是下载安装,和稍作修改.下面接着开始WordPress教程:WordPress主题 ...
- java第十三周课后作业 0529
1.把多个企鹅的信息添加到集合中查看企鹅的数量及所有企鹅的信息删除集合中部分企鹅的元素判断集合中是否包含指定企鹅 package homework; import java.util.ArrayLis ...
- Flask 蓝图进行路由分发.md
Flask 蓝图进行路由分发 Flask虽然说是一个轻型web框架,但也总不能用一个py文件写完全部view吧,所以我们要把路由分到不同的py文件中.这就需要用到蓝图了. 一 创建一个py文件 用于处 ...
- R 语言
ps 帮人学习R语言代码: 定义变量 alldata<-c(32.56,1.4072,28.94,0.231,11.005,2.48713,40.33,1.5334,34.79,0.288,18 ...
- 腾讯云EMR大数据实时OLAP分析案例解析
OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...
- Java实现 LeetCode 122 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意: ...
- Java实现 蓝桥杯 算法提高 道路和航路
问题描述 农夫约翰正在针对一个新区域的牛奶配送合同进行研究.他打算分发牛奶到T个城镇(标号为1-T),这些城镇通过R条标号为(1-R)的道路和P条标号为(1-P)的航路相连. 每一条公路i或者航路i表 ...
- java实现第五届蓝桥杯海盗分金币
海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩上发现 ...
- 减少if...的使用
最近维护一批代码,其中包括一堆if...的使用,多的情况嵌套8.9层,痛苦不堪,所以搜寻一些可以降低if...else的方法来改善一下代码,写个简单总结. 第一种: 优化前 if (measuredV ...