如何在 Spring Boot 中获取 yaml 中的环境变量

How to get environment variable in yaml in Spring Boot

我正在尝试在应用程序启动时读取机密并使其可供

使用
  1. 其他class访问
  2. 并从其他 yaml 文件访问值(用于与其他工具 Eg.api 键集成)。

springboot 应用程序使用 EnvironmentPostProcessorImpl class 在启动时将秘密读取到 Map<String,String>

我想了解什么是使 EnvironmentPostProcessorImpl class 中的 Map<String,String> 可供其他 Java class 使用的正确方法使用占位符访问 yaml 文件,例如。 url: "${URL}",如果可以的话?任何参考都会有所帮助。

在您的 EnvironmentPostProcessor implementation, you should create a MapPropertySource 中,来自您的 Map<String, String>,并将其添加到正在 post 处理的 ConfigurableEnvrionment 中。这将允许应用程序中的组件使用 @ConfigurationProperties@Value、属性 占位符等访问这些属性

Spring Boot 有很多方法可以配置它的Environment。这是包含配置提示的文档 reference for configuration and Spring Boot blog

如果您需要通过 OS 环境变量注入一些 Spring 变量,您需要将所有 . 替换为 _ 并删除所有 -符号。例如,如果你需要注入 属性 my-prefix.api.url,你需要声明环境变量 MYPREFIX_API_URL 然后你可以像普通的 Spring 变量一样访问你的变量。

@Value("${my-prefix.api.url}")
String url;