簡體   English   中英

在 spring 引導應用程序中加載第三方 jar 時出現問題

[英]Problem with loading a third party jar inside a spring boot application

我正在創建一個 Spring 引導應用程序,出於商業原因,我需要導入第 3 方 jar ,它還從名為application.properties的文件中讀取一些配置參數。

我已經在 spring 啟動application.properties文件中定義了我的應用程序和第 3 方 jar 所需的所有配置。

當我從 Eclipse 運行此應用程序時,一切都很好,但是當我使用命令從外部運行它時,jar 中的代碼找不到application.properties文件並引發異常;

java -jar myapp.jar

當我將其更改為以下命令並將application.properties文件放在 jar 之外時,它可以工作;

java -Xbootclasspath/a: -jar myapp.jar

如何在不從 jar 外部放置application.properties文件的情況下使其工作?

一些附加信息; 第三方 jar 是一個庫 jar 作為我的 maven 依賴項。 在第 3 方代碼中有一個地方正在加載application.properties文件,但會引發異常。

    Properties cfg = new Properties();
    FileInputStream is = null;

    URL url = DemoApplication.class.getResource("/");
    if (null != url) {

        String configPath = url.getFile()+ "application.properties";
        try {
            is = new FileInputStream(configPath);
            cfg.load(is); // It fails here
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

例外:

file:/D:/Temp/target/myapp.jar!/BOOT-INF/classes!/application.properties FAILED load config.java.io.FileNotFoundException: file:\D:\Temp\target\myapp.jar!\BOOT-INF\classes!\application.properties (The filename, directory name, or volume label syntax is incorrect) 

如果是maven項目,嘗試使用(mvn package)命令,然后運行目標文件夾下生成的jar

如果您的第三方應用程序是 myApp 的 maven 依賴項,您可以從類路徑加載它:

Properties cfg = new Properties();
cfg.load(DemoApplication.class.getClassLoader().getResourceAsStream("application.properties"));

第 3 方 jar 使用帶有 URL 的 FileInputStream,它以從 Class.getResource(...) 派生的內容開頭。

這永遠不會與 jar 文件一起工作。

可以工作的是跳過 FileInputStream,但使用 Class.getResourceAsStream(...):

InputStream is = DemoApplication.class.getResourceAsStream("/application.properties")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM