springboot 打成的jar包在ClassLoader().getResource方法讀取文件為null


1、屬性文件如下:

10001=錯誤

2、文件讀取主要代碼

// getResource方式
URL resourceURI = getClass().getClassLoader().getResource("");
// getResourceAsStream方式
InputStream stream = getClass().getClassLoader().getResourceAsStream("errorCode.properties");
logger.info(">>>>>>>>>>>>>>>>>>>>>> errorCode stream " + stream);
logger.info(">>>>>>>>>>>>>>>>>>>>>> resourceURI " + resourceURI);
if (null == stream) {
    logger.warn("errorCode.properties file not find");
    return;
}
InputStreamReader reader = new InputStreamReader(stream,"UTF-8");
properties.load(reader);
Enumeration<?> keys = properties.propertyNames();
while(keys.hasMoreElements()) {
    String key = (String) keys.nextElement();
    String value = properties.getProperty(key);
    logger.info("key :" + key + "- value:" + value);
}

2.1 使用idea啟動讀取測試

2.2 使用java -jar xxx.jar啟動測試

從運行結果來看,使用getResourceAsStream方式可以讀到jar中的文件,而使用getResource讀取為空,在jar文件中查找資源和在文件系統中查找資源的方式是不一樣的,盡量使用Stream流的方式操作資源文件。

使用spring-boot-maven-plugin插件打出的fat-jar是不可以作為其他應用的jar依賴的,因為無法向普通的依賴jar那樣去讀取jar中的一些文件,這個和spring-boot-maven-plugin打包機制有關,可以換成使用maven-jar-plugin插件替換進行成可運行的的jar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM