Springboot jar包读取resources目录下的文件

Springboot jar包读取resources目录下的配置文件

  • 使用环境:
    kubernetes集群、docker容器、springboot项目
  • 问题由来:最近在跟AI训练平台对接docker接口,通过调用SpringBoot项目提供的docker接口实现对docker的所有日常操作。在做到docker import接口时,由于AI训练平台的镜像文件比较大,不能直接获取到镜像文件的文件流,所以考虑到了大文件分段传输技术,将AI训练平台的文件通过分段传输过来,然后本地将分段文件保存,传输完毕后再将分段文件整合,实现镜像文件的传输,然后再使用shell脚本进行镜像文件的加载。我将shell脚本放到了resource/shell/目录下,在本地调试的时候是可以获取到shell脚本的,但当我将项目通过CI构建完成发布到kubernetes集群后,报错:
    在这里插入图片描述
  • 问题分析与解决:
  1. 使用jar vtf 【fileName.jar】查看jar包内的文件,发现文件是存在的,路径也是正确的,但不知为何k8s-gpu-api-1.0.0.jar和classes后会有感叹号(路径非法)

  2. 谷歌、百度搜索了相关信息,找到了问题的原因,但按照网上说的文件流、还是ApplicationHome都没有解决问题。

    在本地进行调试时,文件是真实存在于磁盘的某个目录。此时通过获取文件路径,是可以正常读取的,因为文件确实存在。而打包成jar以后,实际上文件是存在于jar这个文件里面的资源文件,在磁盘是没有真实路径的。所以通过ResourceUtils.getFile或者this.getClass().getResource("")方法无法正确获取文件。 [^1]

  3. 将shell脚本通过DockerFile的COPY命令移动到容器的某个目录,然后服务的指定容器上shell脚本所在的shell文件。方法成功,顺利解决spingboot 打成jar包后找不到文件的问题
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 参考文章
    [^1] https://www.cnblogs.com/kaile/p/10193979.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值