出现这个问题的因素是因为我对接支付宝支付,用的是证书公钥方式,我选择把证书存放在项目的resources文件目录下,本地的开发环境读取不会出现问题,但是一旦打成jar包部署到线上,就会报文件找不到。
解决方案:
实现代码:
提供一个根据文件流生成文件副本,同时返回副本绝对路径的工具类的方法即可,引入hutool工具包操作会便捷很多,如下:
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.resource.ClassPathResource; import java.io.File; public class FileUtils { /** copy文件副本,返回文件绝对路径(为了适配linux环境以及本地开发环境对资源文件的读取) @param sourcePath 资源文件路径 @param fileName 副本文件名称 @return */ public static String copyFileToPath(String sourcePath, String fileName) { ClassPathResource resource = new ClassPathResource(sourcePath); byte[] bytes = IoUtil.readBytes(resource.getStream()); File file = FileUtil.writeBytes(bytes, fileName); return file.getAbsolutePath(); } }
接下来使用以上方法即可实现副本证书,间接解决Linux环境读取不到资源文件的问题。