SpringBoot打成jar包后,获取不到读取resources目录下文件路径的问题

问题描述:

Springboot没有打成jar以前,能够成功获取读取resources目录下xxx.json文件的 路径。可是打成jar包后,接口调不通,缘由是获取不到文件的路径。java

缘由:

在本地进行调试时,文件是真实存在于磁盘的某个目录。此时经过获取文件路径,是能够正常读取的,由于文件确实存在。linux

而打包成jar之后,实际上文件是存在于jar这个文件里面的资源文件,在磁盘是没有真实路径的。spring

因此经过ResourceUtils.getFile或者this.getClass().getResource("")方法没法正确获取文件。json

解决办法:

1.在网上查了相关资料说经过流的方式获取,可是测试后仍是没有获取到。app

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才能扫描到

这是这几天作项目时,遇到的问题,特此记录。测试

相关文章
相关标签/搜索