国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

這篇具有很好參考價值的文章主要介紹了解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前幾天在項目讀取resources目錄下的文件時碰到一個小坑,明明在本地是可以正常運(yùn)行的,但是一發(fā)到測試環(huán)境就報錯了,說找不到文件,報錯信息是:class path resource [xxxx] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:xxxx.jar!/BOOT-INF/classes!xxxx。

看了半天代碼感覺沒有問題,于是懷疑是打成項目jar包后和原項目存在差異導(dǎo)致的。于是我把的項目打成jar包,在本地直接調(diào)試jar,果然發(fā)現(xiàn)問題所在。下面我將以一個自己的測試項目api-test替代原來的公司項目來講述一下排查過程。

一、項目代碼

GetResourceTest:

public class GetResourceTest {
    public InputStream getResource1() throws IOException {
        File file = new DefaultResourceLoader().getResource("/template/qiankuan.ftl").getFile();
        return Files.newInputStream(file.toPath());
    }


    public InputStream getResource2() throws IOException {
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = resolver.getResources("/template/qiankuan.ftl");
        Resource resource = resources[0];
        return resource.getInputStream();
    }
}

TestController:

@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping(value = "/getResource")
    @ResponseBody
    public void getResource() throws IOException {
        GetResourceTest getResourceTest = new GetResourceTest();
        getResourceTest.getResource1();
    }
}

二、排查過程

1、首先使用Maven的install命令將項目打成jar包

解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

命令執(zhí)行成功后再target目錄下就生成了jar包
解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

2、在Termininal里cd到target目錄下,然后執(zhí)行下面的代碼,9992可以替換成其他端口

java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9992 api-test-1.0.0-SNAPSHOT.jar

執(zhí)行成功如下
解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

3、添加遠(yuǎn)程調(diào)試

依次點擊菜單Run,點擊Edit Configurations,點擊+,點擊Remote JVM Debug,端口后改成剛剛設(shè)置的9992。
解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

4、請求接口

請求測試接口,9991是項目原來的端口

127.0.0.1:9991/test/getResource

5、請求結(jié)果

請求果然報錯了,報錯和之前測試環(huán)境的報錯一摸一樣。其實我們通過這個報錯已經(jīng)可以大致上看出問題了。。。
解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

6、斷點調(diào)試

在請求的入口打上斷點開始斷點調(diào)試
解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

通過斷點調(diào)試也可以看到這個文件地址在原來的地址/template/qiankuan.ftl 前拼接了jar:file:/D:/Project/test/fhey-test/api-test/target/api-test-1.0.0-SNAPSHOT.jar!/BOOT-INF/classes!成為了jar:file:/D:/Project/test/fhey-test/api-test/target/api-test-1.0.0-SNAPSHOT.jar!/BOOT-INF/classes!/template/qiankuan.ftl。

解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

然后在后面一段代碼中,resourceUrl.getProtocol()的返回結(jié)果是"jar"而不是"file", 被判定為不是文件然后拋出了一個FileNotFoundException異常。
解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題
解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題

三、解決方法

ResouceUtils.getFile()是專門用來加載非壓縮和Jar包文件類型的資源,所以它根本不會去嘗試加載Jar中的文件,要想加載Jar中的文件,只要用可以讀取jar中文件的方式加載即可,比如 可以采用ClassPathResource這種以流的形式讀取文件的方式或者PathMatchingResourcePatternResolver來讀取文件。

ClassPathResource classPathResource = new ClassPathResource("/template/qiankuan.ftl" );
InputStream inputStream = classPathResource.getInputStream();

或者文章來源地址http://www.zghlxwxcb.cn/news/detail-515852.html

ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("/template/qiankuan.ftl");
Resource resource = resources[0];
InputStream inputStream = resource.getInputStream();

到了這里,關(guān)于解決Springboot項目打成jar包后獲取resources目錄下的文件失敗的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解決java在idea運(yùn)行正常,但是打成jar包后中文亂碼問題

    解決java在idea運(yùn)行正常,但是打成jar包后中文亂碼問題

    目錄 比如: 打包命令使用utf-8編碼: 1.當(dāng)在idea中編寫的程序,運(yùn)行一切正常.但是當(dāng)被打成jar包時,執(zhí)行的程序會中文亂碼.產(chǎn)生問題的原因和解決方案是什么呢? 一.問題分析 分別使用idea和jar包形式打印出System中所有的jvm參數(shù)---代碼如下: ? ? idea的打印結(jié)果: jvm---key是: user.name

    2024年02月05日
    瀏覽(26)
  • SpringBoot項目打成jar包之后無法讀取資源文件【jar包文件的讀取方式】

    SpringBoot項目打成jar包之后無法讀取資源文件【jar包文件的讀取方式】

    將文件放在resources目錄下,確保資源文件被打包到j(luò)ar包中 如何判斷資源是否在jar包中,只需要解壓jar包,然后查詢資源名稱即可 讀取文件的時候?qū)懗山^對路徑,肯定是不行的,這個很容易理解。 那讀取文件的時候?qū)懴鄬β窂绞欠窨梢阅??答案也是不行,見下面解釋?這是原

    2024年02月14日
    瀏覽(24)
  • Springboot獲取jar包中resources資源目錄下的文件

    Springboot獲取jar包中resources資源目錄下的文件

    ? ? ? ? 今天在項目中遇到一個業(yè)務(wù)場景,需要用到 resources 資源目錄 下的文件,然后就在思考一個問題: ? ? ? ? 當(dāng)項目打成jar后,Springboot要如何獲取resources 資源目錄下的文件呢? ? ? ? ? 如題,如何在項目打成jar包之后,在代碼中依然能夠獲取到j(luò)ar包中resources資源目錄

    2024年02月11日
    瀏覽(19)
  • idea把項目打成jar包步驟詳解

    idea把項目打成jar包步驟詳解

    ? ? ? ? 最近產(chǎn)品需要預(yù)研一個小功能,開始后在本地開發(fā)測試好之后,需要打成jar提供出去,今天弄完了,決定把這個步驟記錄下來,便于以后輕車熟路。 ? ? ? ? 打成jar要有mian方法的入口,所以我們在代碼中需要定義一個main方法,然后通過這個main方法調(diào)用我們的核心邏

    2024年02月08日
    瀏覽(17)
  • jar包獲取resource下配置文件路徑

    我們在代碼里可以這樣寫 但是打成jar包后就不行了,我們有很多方法獲取jar包路徑或者resource下文件路徑 但是打印后你會發(fā)現(xiàn)路徑里面帶 !,此時就算你去掉!也不行 就算把路徑copy到linux,用cat命令也顯示文件不合法,猜測打包之后的jar就是無法獲取的 但是我們可以讀取文

    2024年02月11日
    瀏覽(22)
  • 【已解決】Spring boot項目獲取到resource目錄下文件完整路徑怎么獲取 ?

    【已解決】Spring boot項目獲取到resource目錄下文件完整路徑怎么獲取 ?

    在實際開發(fā)過程中,可能有時候,我們將文件放在resource下,在程序中需要獲取到文件路徑然后操作。比如,將公鑰放到resource文件夾下,在程序中需要獲取到這個公鑰的完整路徑。怎么操作? ? 需要訪問的文件位置 獲取方法如下: 在yaml文件中配置公鑰文件名稱: pem: ??

    2024年02月09日
    瀏覽(31)
  • 打成jar包運(yùn)行之后報錯,java.io.FileNotFoundException:(已解決)

    打成jar包運(yùn)行之后報錯,java.io.FileNotFoundException:(已解決)

    今天項目測試時,遇到一個問題,因為第一次遇到,所以記錄一下: 1、問題情況如下: ? ? ? ? 存放在項目resources目錄下的靜態(tài)資源文件,需要在接口調(diào)用時,將其copy到其他文件位置,但是打包后運(yùn)行,調(diào)用時報錯FileNotFoundException。 ? ? ? ? 開發(fā)中代碼調(diào)試沒有問題,但

    2024年02月15日
    瀏覽(25)
  • 使用docker-file 將springboot項目打成鏡像,發(fā)布成容器服務(wù)

    使用docker-file 將springboot項目打成鏡像,發(fā)布成容器服務(wù)

    [root@localhost ~]# uname -r 3.10.0-862.el7.x86_64 [root@localhost ~]# yum install docker [root@localhost export]# systemctl start docker [root@localhost export]# docker -v Docker version 1.13.1, build 7d71120/1.13.1 [root@localhost export]# systemctl status docker ● docker.service - Docker Application Container Engine ? ?Loaded: loaded (/usr/lib/systemd

    2024年02月13日
    瀏覽(21)
  • IDEA打成JAR包

    IDEA打成JAR包

    一、場景需求 ? 當(dāng)我們需要將Java項目文件轉(zhuǎn)為exe文件時,需要首先將Java項目文件打包成jar文件。這里我們以常用的Java開發(fā)IDE-IDEA為例,講解打包jar文件的具體步驟。 二、具體步驟 在項目代碼功能都測試無誤后,接下來進(jìn)行工程文件的打包。 菜單欄點擊File后,選擇Project

    2024年02月16日
    瀏覽(21)
  • 快速+完美+準(zhǔn)確解決SpringBoot項目打包后的SNAPSHOT.jar中沒有主清單屬性的問題

    快速+完美+準(zhǔn)確解決SpringBoot項目打包后的SNAPSHOT.jar中沒有主清單屬性的問題

    目錄 問題再現(xiàn) 問題解決 結(jié)果 xxxx-0.0.1-SNAPSHOT.jar中沒有主清單屬性 1 出問題的pom.xml文件 2 正確的pom.xml文件 請注意改變了什么? 答:刪除掉 skiptrue/skip 即可了 改完記得刷新xml文件?。。?! 運(yùn)行成功了, 同時我們發(fā)現(xiàn)了正確打包下的文件遠(yuǎn)比錯誤打包下的文件要大 ?

    2024年02月05日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包