SpringBoot打成jar包后,获取不到读取resources目录下文件路径的问题
问题描述:
Springboot没有打成jar之前,可以成功获取读取resources目录下xxx.json文件的 路径。但是打成jar包后,接口调不通,原因是获取不到文件的路径。
原因:
在本地进行调试时,文件是真实存在于磁盘的某个目录。此时通过获取文件路径,是可以正常读取的,因为文件确实存在。
而打包成jar以后,实际上文件是存在于jar这个文件里面的资源文件,在磁盘是没有真实路径的。
所以通过ResourceUtils.getFile或者this.getClass().getResource("")方法无法正确获取文件。
解决办法:
1.在网上查了相关资料说通过流的方式获取,但是测试后还是没有获取到。
2.最终采用的是绝对路径的方式,获取linux环境下的存放文件的具体路径。如:(/usr/local/)
具体代码:
application.yml设置:
path:
resourcePath: /usr/local/data
代码:
说明:我使用的是自定义工具类,里面的方法是静态的,所以不能直接通过一下这种方式。
原因:spring不允许/不支持把值注入到静态变量中。Spring的@Value依赖注入是依赖set方法,set方法是普通的对象方法,static变量是类的属性,static没有set方法。
@Value("${path.resourcePath}")
private static String resourcePath;
做法:
说明:Spring支持set方法注入,可以利用非静态的setter方法注入静态常量。注意set方法不能有static
private static String resourcePath;
@Value(value = "${URI.resourcePath}")
private void setResourcePath(String resourcePath){
this.resourcePath = resourcePath ;
}
注意:class需要加 @Component等注解,这样spring才能扫描到
这是这几天做项目时,遇到的问题,特此记录。
SpringBoot打成jar包后,获取不到读取resources目录下文件路径的问题的更多相关文章
- springboot打成jar包后无法解压
springboot打成jar包后无法解压 Springboot打出来的jar,用压缩工具解压报错.Why? 先说解决办法. 1.解决办法 executable属性导致的,属性改成false后重新打包 ...
- springboot打成Jar包后部署至Linux服务器上
下面主要记录一下springboot打包成jar包在Linux服务上部署的步骤: 1.通过WinSCP,将相应的Jar文件,复制到Linux指定目录下,如/home/ 2.打开ssh,进入/home目 ...
- SpringBoot打成jar包后无法读取resources资源文件
在项目中做了一个支付功能, 需要引入第三方渠道的配置文件config.xml用来初始化文件证书, 将配置文件 config.xml 放到 resources 资源目录下. 本地开发环境下能正常读取该文 ...
- SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题
看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用Sp ...
- 打成Jar包后运行报错 Unable to locate Spring NamespaceHandler for XML schema namespace
MAVEN项目,在IDEA中运行正常,但是把它打成jar包后再运行就会出现异常: Exception in thread "main" org.springframework. ...
- springboot打成jar包和war包的两种方式,并引入第三方jar包!
springboot打成jar包和war包的两种方式,并引入第三方jar包! 首先把需要引入的第三方jar包引入到本地项目中,在引用的模块下加一个lib文件夹 一.打成jar包 1.修改pom文件里的 ...
- springboot打成jar包并携带第三方jar
1.修改打包方式为jar <packaging>jar</packaging> 2.添加第三方依赖到pom文件 我的第三方依赖包在resources目录下的lib目录下(地址可 ...
- Java基础之用记事本编辑java代码运行,并且打成jar包后运行
使用记事本写java代码 1.在d盘新建一个记事本,名字叫做zhanzhuang.java,会询问不可用,是否继续,点击是 2.在里面编辑就如下内容,注意文件的名字要和 class 后面的名字相对应 ...
- [Java] 在 jar 文件中读取 resources 目录下的文件
注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...
随机推荐
- 版本管理工具小乌龟TortoiseGit的安装和使用(2)
内容中包含 base64string 图片造成字符过多,拒绝显示
- Linux c使用gumbo库解析页面表单信息(三)
前面说了那么多,终于说到如何解析html表单信息了. 什么是表单信息呢,这里我们先要有一些概念: 如上图,这是一个QQ注册页面,注册页面当中需要我们填的空其实就是一个表单信息. 具体到html代码当中 ...
- Spring学习之实例化bean的三种方式
实例化bean的三种方式 构造器实例化bean Person.java public class Person { private String name; private Integer age; ...
- Nginx配置文档
转https://www.cnblogs.com/hunttown/p/5759959.html
- quartz任务调度框架与spring整合
Quartz是什么? Quartz 是一种功能丰富的,开放源码的作业调度库,可以在几乎任何Java应用程序集成 - 从最小的独立的应用程序到规模最大电子商务系统.Quartz可以用来创建简单或复杂的日 ...
- CEPH集群操作入门--配置
参考文档:CEPH官网集群操作文档 概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...
- R语言RODBC数据库操作
最近准备做一个股票的数据库,用R语言来获取数据,然后存在SQL Sever 2016 express 里面,虽然前面接触过一些操作,但是还是很不熟悉,现在数据已经能获取到了,是时候好好学习一下怎么用R ...
- pgmpy安装
1.anaconda安装,可能在cmd中输入conda会报错,是因为在安装的时候没有配置好环境变量,在安装的时候有一个框框没选(当时是not recommand), 解决办法:需要在系统环境变量中添加 ...
- ionic2中使用datetime组件如何默认设置当前时间?
HTML: <ion-item> <span item-left style="min-height: 27px;">存款日期/时间</span> ...
- 语言模型(N-Gram)
问题描述:由于公司业务产品中,需要用户自己填写公司名称,而这个公司名称存在大量的乱填现象,因此需要对其做一些归一化的问题.在这基础上,能延伸出一个预测用户填写的公司名是否有效的模型出来. 目标:问题提 ...