Linux环境读取不到资源文件

出现这个问题的因素是因为我对接支付宝支付,用的是证书公钥方式,我选择把证书存放在项目的resources文件目录下,本地的开发环境读取不会出现问题,但是一旦打成jar包部署到线上,就会报文件找不到。

解决方案:

  1. 把证书存放在Linux服务器上,可以迂回解决这个问题,但是如果要做服务集群,服务器数量一多,操作就会显得很繁琐,每个服务器都要放置证书,一不小心很容易出错,所以我们采用第二种。
  2. 使用文件副本的方式,就是一旦项目启动,我们就读取资源文件流,然后生成文件副本,再取得他的绝对路径即可。

实现代码:

提供一个根据文件流生成文件副本,同时返回副本绝对路径的工具类的方法即可,引入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环境读取不到资源文件的问题。

上一篇:Hutool--让Java开发也能“甜甜的”


下一篇:hutool工具的aes加密算法封装