Jar 文件找不到密钥库
Jar file not able to find the keystore
我运行正在使用 SpringKafka producer.I 已经在 yml 文件中配置了密钥库位置,当 运行 在 eclipse 中时它被拾取。但是当代码 运行 作为 jar 时,它无法找到密钥库 location.How 来解决这个问题。
spring:
kafka:
producer:
ssl:
key-password:
key-store-location: classpath:es-cert.jks
key-store-password: password
key-store-type: jks
这是我的 yml 文件。
我收到以下错误:
java.io.FileNotFoundException: class 路径资源 [es-cert.jks] 无法解析为绝对文件路径,因为它不驻留在文件系统中: jar:file: /u01/home/app/user-docker/kafka2.jar!/BOOT-INF/classes!/es-cert.jks
但是 es-cert.jks 存在于 jar 中。
Kafka 不理解 Spring 资源,只理解文件系统上的文件。
您不能使用 classpath:
从 jar 引用密钥存储,因为 Spring Boot 必须将资源转换为绝对路径才能将其传递给 Kafka。
private String resourceToPath(Resource resource) {
try {
return resource.getFile().getAbsolutePath();
}
catch (IOException ex) {
throw new IllegalStateException("Resource '" + resource + "' must be on a file system", ex);
}
一个解决方案是自己将密钥库从 jar 资源复制到文件系统上的文件中。在加载 SpringApplication
.
之前执行此操作
例如使用 FileCopyUtils
.
我运行正在使用 SpringKafka producer.I 已经在 yml 文件中配置了密钥库位置,当 运行 在 eclipse 中时它被拾取。但是当代码 运行 作为 jar 时,它无法找到密钥库 location.How 来解决这个问题。
spring:
kafka:
producer:
ssl:
key-password:
key-store-location: classpath:es-cert.jks
key-store-password: password
key-store-type: jks
这是我的 yml 文件。
我收到以下错误:
java.io.FileNotFoundException: class 路径资源 [es-cert.jks] 无法解析为绝对文件路径,因为它不驻留在文件系统中: jar:file: /u01/home/app/user-docker/kafka2.jar!/BOOT-INF/classes!/es-cert.jks
但是 es-cert.jks 存在于 jar 中。
Kafka 不理解 Spring 资源,只理解文件系统上的文件。
您不能使用 classpath:
从 jar 引用密钥存储,因为 Spring Boot 必须将资源转换为绝对路径才能将其传递给 Kafka。
private String resourceToPath(Resource resource) {
try {
return resource.getFile().getAbsolutePath();
}
catch (IOException ex) {
throw new IllegalStateException("Resource '" + resource + "' must be on a file system", ex);
}
一个解决方案是自己将密钥库从 jar 资源复制到文件系统上的文件中。在加载 SpringApplication
.
例如使用 FileCopyUtils
.