【发布时间】:2020-07-20 20:06:21
【问题描述】:
我正在创建一个 Spring Boot 应用程序,出于商业原因,我需要导入一个第 3 方 jar,它还从名为 application.properties 的文件中读取一些配置参数。
我已经在 spring boot application.properties 文件中定义了我的应用和第 3 方 jar 所需的所有配置。
当我从 Eclipse 运行这个应用程序时,一切都很好,但是当我使用命令从外部运行它时,jar 内的代码找不到 application.properties 文件并引发异常;
java -jar myapp.jar
当我将其更改为以下命令并将 application.properties 文件放在 jar 之外时,它可以工作;
java -Xbootclasspath/a: -jar myapp.jar
如果不从 jar 外部放置 application.properties 文件,如何使其工作?
一些附加信息; 第 3 方 jar 是作为我的 maven 依赖项包含的 lib jar。在第 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)
【问题讨论】:
-
有助于查看异常
-
异常如下: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(文件名、目录名或卷标语法不正确)
-
它是一个 maven 项目,我确实使用 mv install 来生成包。包没问题,失败是因为外部jar读取属性文件
-
第三方 jar 是如何启动的?第三方 jar 是您的 Spring Boot 应用程序的 mavendependency 吗?或者它是单独开始的。以及您如何尝试读取第三方应用程序中的属性。也许提供一些代码。
-
第三方 jar 是作为依赖项包含在我的项目中的外部库,我已编辑问题以包含代码 sn-p 在加载 application.properties 文件时失败的地方。
标签: java spring spring-boot