解决第三方多个文件存储在linux上读取路径访问问题
根据项目需要,需要对接第三,第三方给的文件,和私密要。都需要我们去初始化加载。那么文件存放的位置,成为我们解决的问题。
我们存储的第三方文件应该放哪里。,这就需要根据线上部署不同环境。一下介绍:
1.分布式环境 存放第三方文件。
由于分布式环境中,linux的路径很难找到。这就需要我们在部署时,自动生成一个linux目录。
思想:利用流的复制。把我们的随需要第三方文件复制在当前linux运行环境中。
解决方案: 我们首先把。需要加载的第三方文件存在,项目resource目录下的一个包中,

放置位置好以后我们需要去加载
写一个监听器:
@Service public class WebappListener implements ApplicationListener<ContextRefreshedEvent> { @Autowired private ZhongjinPayConfig zhongjinPayConfig; private static final Logger logger = LoggerFactory.getLogger(WebappListener.class); @Override public void onApplicationEvent(ContextRefreshedEvent arg0) { onApplication(); contextInitialized(); } public void contextInitialized() { try { File directory = new File("");// 参数为空 String courseFile = directory.getCanonicalPath(); String paymentConfigPath = courseFile+zhongjinPayConfig.getZhongjinPaymentPath(); // 初始化系统环境 InitSystem.initialize(paymentConfigPath); } catch (Exception e) { logger.error(MessageFormat.format("【支付初始化失败】:地址:{0}",zhongjinPayConfig.getZhongjinPaymentPath())); } } public void onApplication() { //获取容器资源解析器 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); String[] source={"/zhongjin/*.pfx","/zhongjin/*.ini","/zhongjin/*.jks","/zhongjin/*.cer"}; for(int i=0;i<source.length;i++){ try { //获取所有匹配的文件 Resource[] resources = resolver.getResources(source[i]); for(Resource resource : resources) { //获得文件流,因为在jar文件中,不能直接通过文件资源路径拿到文件,但是可以在jar包中拿到文件流 InputStream stream = resource.getInputStream(); if (logger.isInfoEnabled()) { logger.info("读取的文件流 [" + stream + "]"); } String targetFilePath = "zhongjin/"+resource.getFilename(); if (logger.isInfoEnabled()) { logger.info("放置位置 [" + targetFilePath + "]"); } File file2 = ResourceUtils.getFile(targetFilePath); FileUtils.copyInputStreamToFile(stream, file2); } logger.debug("复制成功"); } catch (IOException e) { if (logger.isWarnEnabled()) { logger.warn("读取文件流失败,写入本地库失败! " + e); } } } } }
//重点就是这个onApplication()会复制成功我们生成一份文件存储。那就是本项目下的一个zhongjin目录下。

这就完美的解决我们linux分布式,请求路径的范围问题。
2.单独放置一个linux服务器上。 一般这种配置,我们叫做本地配置。就是把文件放置生成环境中目录下。比如、/data/zhongjin
这样我们在读取的时候,直接读取固定linux目录即可。

浙公网安备 33010602011771号