国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 幫助中心 > 正文

SpringBoot如何讀取war包jar包和Resource資源

2024-07-09 22:43:11
字體:
供稿:網(wǎng)友

這篇文章主要介紹了SpringBoot如何讀取war包jar包和Resource資源,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

場景描述

在開發(fā)過程中我們經(jīng)常會碰到要在代碼中獲取資源文件的情況,而我在最近在SpringBoot項目中時碰到一個問題,就是在本地運行時,獲取本地的xml資源文件是能夠獲取到的,但是項目打成war包jar包啟動運行時,就會發(fā)生問題,報找不到資源文件的錯誤。然后經(jīng)過尋找排查確定了是下面代碼通過ClassLoader獲取路徑的時候出錯了。

常用方式:

/** * @author mazhq * @Title: TestMain * @ProjectName: zeus * @Description: TODO * @date 2019/3/5 16:10 */public class TestMain {  public static void main(String[] args) {    String path = TestMain.class.getClassLoader().getResource("1.xml").getPath();    System.out.println(path);  } /**   * 輸出:   *   */D:/demo_projects/sc-architecture/service-hi/target/classes/1.xml   */}

但是在將SpringBoot打包放到Linux服務器啟動打印的目錄為

/data/zeus/service-hi-1.0.0-SNAPSHOT.war!/WEB-INF/classes!/1.xml

可以看到在Linux中無法直接訪問未經(jīng)解壓的文件,所以就會找不到文件。

解決辦法

1. 通過ClassLoader的getResourceAsStream()方法獲取其流,就能夠獲取到。

讀取jar里面的文件,我們只能用流去讀取,不能用File

public class TestMain {  public static void main(String[] args) {    try {      List<String> content = IOUtils.readLines(TestMain.class.getClassLoader().getResourceAsStream("1.xml"), "UTF-8");    } catch (IOException e) {      e.printStackTrace();    }  }}

2. 采用絕對路徑將文件放到服務器某個路徑,在application.properties中配置路徑讀取。

3. 不推薦:將內(nèi)容放到數(shù)據(jù)庫中。

獲取資源的兩種方式

通常在開發(fā)過程中會碰到讀取配置文件的問題,一般有兩種方式進行讀取。一種是Class.getResource(String path),一種是ClassLoader.getResource(String path),這兩種雖然都能讀取文件,但是在path的填寫上有一點點的不同。

Class.getResource

path以/開頭:則是從ClassPath根下獲取

path不以/開頭:默認是從此類所在的包下取資源

下面有個例子

public class TestMain {  public static void main(String[] args) {    System.out.println(TestMain.class.getResource("/"));    System.out.println(TestMain.class.getResource(""));  }  /**   * 輸出:   *   * file:/D:/demo_projects/sc-architecture/service-hi/target/classes/   * file:/D:/demo_projects/sc-architecture/service-hi/target/classes/com/mazhq/servicehi/   */}

那么讀取在resource下的1.xml,就如下的獲取方法

public class TestMain {  public static void main(String[] args) {    System.out.println(TestMain.class.getResource("/1.xml"));    System.out.println(TestMain.class.getResource("../../../1.xml"));  }  /**   * 輸出:   *   * file:/D:/demo_projects/sc-architecture/service-hi/target/classes/1.xml   * file:/D:/demo_projects/sc-architecture/service-hi/target/classes/1.xml   */}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南木林县| 兰坪| 奇台县| 揭东县| 威信县| 安远县| 龙江县| 巴中市| 凭祥市| 栾川县| 新邵县| 正镶白旗| 亳州市| 满城县| 梅州市| 沂水县| 桂东县| 荥经县| 潼南县| 禄劝| 太白县| 庐江县| 长治县| 普格县| 诏安县| 富平县| 迭部县| 大洼县| 武鸣县| 恩施市| 革吉县| 安新县| 南宫市| 禹州市| 衡阳市| 昌邑市| 环江| 丰顺县| 崇左市| 都江堰市| 垣曲县|