问题描述:

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目录下文件路径的问题的更多相关文章

  1. springboot打成jar包后无法解压

    springboot打成jar包后无法解压 Springboot打出来的jar,用压缩工具解压报错.Why? 先说解决办法. 1.解决办法 executable属性导致的,属性改成false后重新打包 ...

  2. springboot打成Jar包后部署至Linux服务器上

    下面主要记录一下springboot打包成jar包在Linux服务上部署的步骤: 1.通过WinSCP,将相应的Jar文件,复制到Linux指定目录下,如/home/ 2.打开ssh,进入/home目 ...

  3. SpringBoot打成jar包后无法读取resources资源文件

    在项目中做了一个支付功能, 需要引入第三方渠道的配置文件config.xml用来初始化文件证书, 将配置文件 config.xml 放到 resources 资源目录下. 本地开发环境下能正常读取该文 ...

  4. SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题

    看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用Sp ...

  5. 打成Jar包后运行报错 Unable to locate Spring NamespaceHandler for XML schema namespace

    MAVEN项目,在IDEA中运行正常,但是把它打成jar包后再运行就会出现异常:   Exception in thread "main" org.springframework. ...

  6. springboot打成jar包和war包的两种方式,并引入第三方jar包!

    springboot打成jar包和war包的两种方式,并引入第三方jar包! 首先把需要引入的第三方jar包引入到本地项目中,在引用的模块下加一个lib文件夹 一.打成jar包 1.修改pom文件里的 ...

  7. springboot打成jar包并携带第三方jar

    1.修改打包方式为jar <packaging>jar</packaging> 2.添加第三方依赖到pom文件 我的第三方依赖包在resources目录下的lib目录下(地址可 ...

  8. Java基础之用记事本编辑java代码运行,并且打成jar包后运行

    使用记事本写java代码 1.在d盘新建一个记事本,名字叫做zhanzhuang.java,会询问不可用,是否继续,点击是 2.在里面编辑就如下内容,注意文件的名字要和 class 后面的名字相对应 ...

  9. [Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

随机推荐

  1. Linux c codeblock的使用(三):使用函数库

    (一)概念 什么是函数库呢?一下子说概念大家可能不太熟悉,但是这实际上是大家在windows系统上经常见到的东西.没错,就是那些后缀为DLL的文件. linux上实际也有自己的函数库文件,文件类型为. ...

  2. 算法面试题(python)——如何找出数组中出现一次的数

    题目描述: 一个数组里,除了三个数是唯一出现的,其余的数都出现了偶数次,找出这三个数中任意一个.比如数组序列为[1,2,4,5,6,4,2],只有1.5.6这三个数字是唯一出现的,数字2.4均出现了偶 ...

  3. 大数据面试题——如何找出访问最多的IP

    问题描述: 现有海量日志数据保存在一个超大的文件中,该文件无法直接存入内存,要求从 中提取某天访问BD次数最多的IP 分析解读: 由于这个题目只关心某一天访问次数最多的IP,因此可以首先对文件进行一次 ...

  4. java入门day03

    控制流程 一:   if else   /    switch 1. 随机数的产生:导入import java.lang.Math; num=Math.random()  -->[0,1); [ ...

  5. java基础3(二)

    基础加强 类加载器 A.类加载器获取classpath下任意内容 注意: 可以通过ClassLoader可以获取classpath下的所有内容. SpringMVC 1.整体架构 流程图 2.流程细节 ...

  6. Sql Server 获取存储过程或函数创建语句

    通过该语句可以获取到sqlserver 所有的函数名或者存储过程名 SELECT name FROM sysobjects WHERE xtype='P'; 通过该语句可查询出函数或者存储过的的创建语 ...

  7. SharePoint Framework 向web部件中添加外部库

    博客地址:http://blog.csdn.net/FoxDave 在进行开发的时候,你很可能会想要引用一些公开的JavaScript库到你的项目中,本文将会介绍如何打包和共享这些库. 打包脚本 默认 ...

  8. C# 事件的使用方法

    事件 事件是C#中另一高级概念,使用方法和委托相关.奥运会参加百米的田径运动员听到枪声,比赛立即进行.其中枪声是事件,而运动员比赛就是这个事件发生后的动作.不参加该项比赛的人对枪声没有反应. 从程序员 ...

  9. vs-code 基础设置

    汉化设置: 最新版的vscode 汉化需要两步 1 ctrl+shift+p   在顶部输入框中输入 language 后选择  configure Display Language  后进入 第二张 ...

  10. makefile笔记2 - makefile总述

    一.makefile的组成 Makefile 里主要包含了五个东西:显示规则.隐晦规则.变量定义.文件指示和注释. 1. 显示规则.显示规则说明了,如何生成一个或多的的目标文件.这是由 Makefil ...