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目录下资源文件的报错的更多相关文章

  1. Qt编译目录下exe文件执行报错问题的解决办法

    使用Qt5.9.3+vs2017环境,编译项目生成Debug目录,运行其中的exe文件,出现以下错误(qt creator调试状态下或出安装包后是可以运行的): 经过查阅资料,发现是我重新配置Qt开发 ...

  2. SpringBoot 项目打包后获取不到resource下资源的解决

    SpringBoot 项目打包后获取不到resource下资源的解决 在项目中有几个文件需要下载,然后不想暴露真实路径,又没有CDN,便决定使用接口的方式来获取文件.最初的时候使用了传统的方法来获取文 ...

  3. Spring boot 读取resource目录下的文件

    背景:最近做项目重构将以前的ssh + angular js架构,重构为spring boot + vue.项目是一个数据管理平台,后台涉及到多表关联查询,数据导入导出等. 问题:读取resource ...

  4. springboot 获取Resource目录下的文件

    如图,获取user.png: 代码实现: //文件路径,此处static前不能加/,否则解析不到try { //此处的static前不能加/!!! file = ResourceUtils.getFi ...

  5. Java获取Resource目录下的文件

    工程结构: 有两种方式: Java代码中的类,要获取Resource资源文件目录下文件 绝对路径寻址 String s1 = this.getClass().getResource("/te ...

  6. 读取spring boot项目中resource目录下的文件

    在开发中, 我们常常要将我们的配置文件或者模板文件放在我们的resource目录中. 如下 而在spring boot的项目中, 我们运行的是一个jar包, 并没有解压 所以当我们使用以下方式获取文件 ...

  7. PyChram中同目录下import引包报错的解决办法?

    相信很多同学和我一样在PyChram工具中新建python项目的同目录下import引包会报错提示找不到,这是因为该项目找不到python的环境导致的: 如果文件开始的时候包引包的错误可以,都可以用用 ...

  8. springboot的启动类不能直接放在src/java目录下,不然会报错

    jar包的application.yml 会被项目的覆盖,导致找不到原有的配置

  9. vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token <" 报错

    参考链接:https://segmentfault.com/a/1190000016919340

随机推荐

  1. 必会技能!Docker助你快速上手玩转HBase!

    前言:本文主要讲述了如何使用Docker快速上手HBase,省去繁杂的安装部署环境,直接上手,小白必备.适合HBase入门学习及简单代码测试. 1. Docker 安装 参考地址: https://y ...

  2. Linux 下批量杀死进程

    ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入.下面 ...

  3. SQL面试50题

    1.查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号(重点) SELECT a.s_id,a.s_score FROM (') as a INNER JOIN (') as b on ...

  4. 前端基础进阶(六):在chrome开发者工具中观察函数调用栈、作用域链与闭包

    在前端开发中,有一个非常重要的技能,叫做断点调试. 在chrome的开发者工具中,通过断点调试,我们能够非常方便的一步一步的观察JavaScript的执行过程,直观感知函数调用栈,作用域链,变量对象, ...

  5. python 验证码处理

    一. 灰度处理,就是把彩色的验证码图片转为灰色的图片. 二值化,是将图片处理为只有黑白两色的图片,利于后面的图像处理和识别 # 自适应阀值二值化 def _get_dynamic_binary_ima ...

  6. 接口(interface)的使用

    类实现接口就具有接口的功能 实现可以多实现,实现多个接口 package cm.aff.abst; /* 接口(interface)是与类并行的一个概念 1. 接口可以看做是一个特殊的抽象类,是常量与 ...

  7. SpringBoot—单元测试模板(controller层和service层)

    介绍 概述   在开发过程中,我们经常会一股脑的写各种业务逻辑,经常等全部大功告成的时候,打个jar包放环境里跑跑看看能不能通,殊不知在各个业务方法中已经漏洞百出,修复一个打一个包,再继续修复,这种效 ...

  8. Rocket - decode - 几个问题

    https://mp.weixin.qq.com/s/pMsK_E4mQrm3QXdnp7nDPQ   讨论指令解码部分遗留的几个问题.     1. 最小项与蕴含项之间的关系   参考链接: htt ...

  9. UML ——六种依赖关系.md

    在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compos ...

  10. Spring (一 ) 概述与介绍

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 目录 1.Spring概述 2.Spring的模块介绍 Spring框架分为四大模块: 3.Eclips ...