Spring-引导:如何从类路径或文件系统加载密钥库资源文件?

Spring-Boot: How to load a keystore resource file either from the classpath or from the file system?

我的 spring-boot 应用程序需要通过 Java 密钥库访问私钥。对于测试,我想使用类路径上可用的测试密钥库(这样我可以轻松地将应用程序作为集成测试的一部分执行),而在生产中我想使用来自某个外部卷的密钥库(例如,作为 k8 secret 安装在容器内。

我知道 spring-boot @Value 注释允许我注入资源。但是,我看不出如何让它动态地尊重 spring 环境(例如,测试或生产)。 spring-boot 是否提供了开箱即用的方法来解决上述问题,还是我需要根据部署环境编写自己的 bean 来加载正确的密钥库?

您可以使用 属性 作为资源路径,并根据活动配置文件在您的应用程序道具中设置不同的 属性 值。

@Value("${my.resource.path:#{null}}")
private Resource myResource;

application.yml:

spring:
    config:
        activate:
            on-profile: test
my.resource.path: 'classpath:test/path/keystore.jks'

---
spring:
    config:
        activate:
            on-profile: prod
my.resource.path: 'file:prod/path/keystore.jks'