我有一个托管在 Openshift 中的 Vault 服务器,我必须将 Vault 中的 secret 访问到我的 Spring 应用程序中。 我的 bootstrap.yml 如下所示:
spring:
application:
name: application-name
profiles: dev
cloud:
vault:
fail-fast: true
host: HOST
port: 443
scheme: https
token: MY_TOKEN
authentication: TOKEN
kv:
enabled: true
backend: secret
profile-separator: '/'
application-name: application-name
我检查了Vault日志并能够从Spring应用程序连接到Vault。
我可以使用值属性源访问 secret 。 但是,我想将 key 的值填充到 application.properties 中以更新 spring.datasource.username 和 spring.datasource.password 等属性。
有没有办法直接从application.properties访问 secret ?
最佳答案
TL; DR:是的,您可以在application.(properties|yml)
中使用Vault属性。不建议在 bootstrap.(properties.yml)
中使用这些。
Spring Cloud 附带了一个 Bootstrap 上下文,配置库(例如 Spring Cloud Consul、Spring Cloud Config 和 Spring Cloud Vault)在其中初始化。这些集成获取配置并将其作为父 PropertySource
提供给您的应用程序。在属性绑定(bind)期间以及使用 Environment
解析属性值时,Spring Boot 会考虑这些(您可以选择以最高/最低优先级使用这些 PropertySource
)。
引导应用程序时,通常首先发生的事情之一就是 @ConfigurationProperties
对象中的属性绑定(bind)。加载 bootstrap.(properties|yml) 时,通常 Spring Cloud Config 集成尚未运行,因此此时您看不到这些库贡献的属性。因此,引导上下文和实际应用程序上下文之间存在分离。
关于spring - 使用 spring-cloud-vault 访问保管库 secret 并在 application.properties 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59561774/