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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章