使用 java -jar 运行 Spring Boot kafka 应用程序时找不到 truststore.jks

问题描述

我的应用程序可以在 eclipse 中运行,也可以通过 gradlew bootRun 运行。但是当我通过 gradlew build 构建一个 'fat' jar 文件 app.jar,然后通过 java -jar app.jar 启动应用程序时,我得到以下错误: >

ERROR o.a.k.c.s.ssl.SslEngineBuilder - 无法获取密钥库的修改时间:kafka_truststore.jks java.nio.file.NoSuchFileException: kafka_truststore.jks

kafka_truststore.jks 在 application.properties 中定义如下

kafka.truststore_location=src/main/resources/kafka_truststore.jks

它在kafka客户端配置类中使用,如下所示

@Value("${kafka.truststore_location}") private String trustStoreLocation;

props.put("ssl.truststore.location",trustStoreLocation);

有人知道如何解决这个问题吗?谢谢。

解决方法

构建 jar 时,资源中的所有文件通常都打包在项目根目录中。

所以为了让 trustore,jks 工作,改变你的 application.propeties 如下

kafka.truststore_location=classpath:kafka_truststore.jks

这将在 IDE 和独立运行胖 jar 时工作。