如何解决springboot项目找不到resources目录下的资源问题
小编给大家分享一下如何解决springboot项目找不到resources目录下的资源问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
springboot项目找不到resources目录下的资源
问题描述:
将老的mvc项目转为boot后找不到resources文件夹下的资源文件
原因:
war包采用的是tomcat部署,tomcat会对war包进行解压,以及目录的一些操作。而springboot使用jar包部署,服务器中是不存在相关目录的。
环境:
springboot 2.2.2RELAESE
主要的API:
ClassPathResource classPathResource = new ClassPathResource(filePath);InputStream inputStream = classPathResource.getInputStream();
工具类
import java.io.File;import java.io.InputStream; import org.apache.commons.io.FileUtils;import org.apache.commons.io.IOUtils;import org.springframework.core.io.ClassPathResource; public class FileUtil { public File getResourceFile(String filePath) throws Exception{ try { ClassPathResource classPathResource = new ClassPathResource(filePath); InputStream inputStream = classPathResource.getInputStream(); //生成目标文件 File somethingFile = File.createTempFile("DailyReportTemplate", ".xls"); try { FileUtils.copyInputStreamToFile(inputStream, somethingFile); } finally { IOUtils.closeQuietly(inputStream); } return somethingFile; } catch (Exception e) { throw new Exception(e); } } }
运行jar文件时,ClassPathResource无法读取到资源文件的问题
问题场景:
在idea中运行,一切正常,资源文件都可以访问到,但打成jar包后,使用java -jar的形式去启动,就访问不到resource下的资源文件了
网上搜了很多文章,但试了后都不好使
我的路径是配置在properties文件中,然后读取配置文件中的值,然后拼接文件路径,再使用ClassPathResource去读取的
开始时我配置文件中是这样写的:
#路径中注意首尾不要有空格service.config-root=static/service/service.config-name=AppConfig.json
程序代码读出后拼接:
@Value("${service.config-root}")private String configRoot; @Value("${service.config-name}")private String configName; .....省略无关code..... public String getPath(){ String configPath = this.configRoot + this.configName; return configPath;}
但运行jar后,直接FileNotFoundException了
解决:
方案1:
主要是斜杠"\"和反斜杠"/"的问题,配置文件修改如下:
#路径中注意首尾不要有空格service.config-root=static\\tileservice\\service.config-name=AppConfig.json
方案2:
使用"File.spearator"拼接路径
service.config-root=staticservice.config-name=AppConfig.json@Value("${service.config-root}")private String configRoot; @Value("${service.config-name}")private String configName; .....省略无关code..... public static <T> T readJsonFromClassPath(Type type) throws IOException { //这里使用File.spearator拼接 ClassPathResource resource = new ClassPathResource(this.configRoot + File.spearator + this.configName); if (resource.exists()) { return JSON.parseObject(resource.getInputStream(), StandardCharsets.UTF_8, type, ..... } }
看完了这篇文章,相信你对“如何解决springboot项目找不到resources目录下的资源问题”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341