解决springboot项目找不到resources目录下的资源问题

网友投稿 1767 2022-12-19

解决springboot项目找不到resources目录下的资源问题

解决springboot项目找不到resources目录下的资源问题

springboot项目找不到resources目录下的资源

问题描述:

将老的mvc项目转为boot后找不到resources文件夹下的资源文件

原因:

war包采用的是tomcat部署,tomcat会对war包进行解压,以及目录的一些操作。而springboot使用jar包部署,服务器中是不存在相关目录的。

环境:

springboot 2.2.2RELAESE

主要的API:

ClassPathResourcehttp:// 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:

主要oGkTdT是斜杠"\"和反斜杠"/"的问题,配置文件修改如下:

#路径中注意首尾不要有空格

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, .....

}

}

搞定!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:十五道tomcat面试题,为数不多的机会!
下一篇:解决MyBatis中Enum字段参数解析问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~