Jar文件无法找到密钥库

时间:2019-11-05 13:24:59

标签: java spring-boot ssl keystore spring-kafka

我正在运行一个SpringKafka生产者。我已经在yml文件中配置了密钥库的位置,并且在Eclipse中运行时被提取。但是,当代码作为jar运行时,无法找到密钥库位置。如何解决此问题。

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:类路径资源[es-cert.jks]无法解析为绝对文件路径,因为它不驻留在文件系统中:jar:file:/ u01 / home / app / user-docker /kafka2.jar!/BOOT-INF/classes!/es-cert.jks

但是es-cert.jks存在于jar中。

1 个答案:

答案 0 :(得分:2)

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