当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中读取jar外部的文件

慎俊艾
2023-03-14

我正在尝试运行应用程序jar并将应用程序配置(application.yml)外部化。有几个文件是从application.yml.引用的

应用程序运行命令:

java -Dspring.config.location=file:/absolulte/path/to/application.yml -cp ".:/path/to/app/resources" -jar /path/to/application.jar

目录结构:

app/
├─ resources/
│  ├─ keystore.jks
│  ├─ application.yml
├─ application.jar

以Kafka图书馆试图访问文件为例。

我尝试通过以下方式配置路径

application.yml

keystore-location: classpath:keystore.jks

当库试图访问这些文件时,我得到以下错误。

原因:java.io.FileNotFoundException:类路径资源[keystore.jks]无法解析为绝对文件路径,因为它不驻留在文件系统:jar: file:/path/to/file/application.jar! /BOOT-INF/classes!/keystore.jks

并且随着

keystore-location: file://keystore.jks

原因:Java . nio . file . invalidpathexception:非法字符

它不是在指定的路径中查找文件,而是在 jar 中查找。

Spring Kafka库就是其中一个例子,很少有其他库也给出类似的错误。

SpringBoot版本:2.2.5.RELEASE

Java 版本: 1.8

谢谢

共有1个答案

瞿宏儒
2023-03-14

keystore和truststore文件由Apache Kafka (kafka-clients)读取,而不是Spring,并且必须在文件系统上;在创建Spring应用程序上下文之前,您必须编写自己的代码将文件从类路径复制到文件系统(例如/tmp)。

阿帕奇·Kafka有一个公开的问题。

它已经开放很长时间了;投票支持它可能会有所帮助。

https://issues.apache.org/jira/browse/KAFKA-7685

 类似资料:
  • 你好,我最近把我的JavaFX8项目改为Maven,除了加载JAR旁边的文件外,一切都很好。这在以前起作用,但现在不起作用了。 文件夹结构: 要加载的图标位于/target/Icons中,JAR文件位于/target中 我读取文件的代码如下所示: 它进入循环并查找文件,但当新图像(file.getAbsoltePath())被调用时,它会崩溃。 我尝试了toExternalForm()等的各种方法

  • 我已经创建了一个SpringBoot应用程序,并且我将Application.properties放置在jar文件的同一个文件夹中。这是文件的内容: 当我在jar文件夹外运行/bin/java-jar/opt/apl/org.web.exemplo-java-maven.1.0.0-90/org.web.exemplo-java-maven-1.0.0-90.jar时,它不读取applicatio

  • 问题内容: 我们为我们的一个应用程序提供了一个连接池组件(JAR文件)。截至目前,应用程序连接详细信息捆绑在JAR文件中(在文件中)。 我们可以使其更通用吗?我们可以让客户端告诉属性文件详细信息(路径和文件名),然后使用JAR来获得连接吗? 客户端代码中包含以下内容是否有意义: 与此同时,客户端将指定(以某种方式???)属性文件详细信息,其中包含要连接的URL,超时等。 问题答案: http://

  • 问题内容: 我有一个JAR文件,我的所有代码都已存档以便运行。我必须访问一个属性文件,每次运行前都需要对其进行更改/编辑。我想将属性文件保留在JAR文件所在的目录中。无论如何,有没有告诉Java从该目录中提取属性文件? 注意:我不想将属性文件保留在主目录中或在命令行参数中传递属性文件的路径。 问题答案: 因此,你希望将与主/可运行jar相同文件夹中的文件视为文件,而不是作为主/可运行jar的资源。

  • 我有一个带有spring boot的java项目,我需要加载应用程序。外部文件夹中的属性和依赖项jar。 我使用该应用程序进行了测试。类路径和加载程序中的属性。路径属性工作正常。 当我使用外部属性文件(我确信它们已被使用)时,加载程序。路径工作不正常,结果为ClassNotFound,因为JAR未加载。 此外,当我启动应用程序与**-Dloader.path=**xxx它的工作正常。 如何使用外部

  • 我想用mod在屏幕上显示一些东西,为此我想在测试中写下“helloworld”。txt(稍后将是json)并将其保存在某处(?)在我的minecraft文件夹中,所以我不需要重新编译我的mod来获得这些数据; 从我的mod读取此文件并将其显示在屏幕上的正确方法是什么?我正在使用MCreator,只有慢慢开始编码“自定义元素”,你可以称我为java编程的新手 我的想法是: (MCreator生成的代