解决springboot项目找不到resources目录下的资源问题
admin
2023-04-30 22:32:39

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=static
service.config-name=AppConfig.json
@Value("${service.config-root}")
private String configRoot; 
@Value("${service.config-name}")
private String configName;
 
.....省略无关code.....
 
 public static  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, .....
        }
    }

搞定!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持趣讯吧。

相关内容

热门资讯

脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...