我想在加载时更改application.yaml
的值。
ex)应用程序.yaml
user.name: ${name}
在这里,我想通过调用一个外部API(如vault)来放置这个值,而不是在使用name值执行jar时使用程序参数。
首先,我想我需要编写实现EnvironmentPostProcessor
并调用外部API的代码,但我不知道如何注入该值。
public class EnvironmentConfig implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
SpringApplication application) {
// API CAll
// how can inject yaml value??
}
}
我不知道该往哪走。
2条答案
按热度按时间ogq8wdun1#
选项1:通过环境后处理器执行:
假设您已在
/resources/META-INF/spring.factories
文件中注册了EnvironmentPostProcessor:org.springframework.boot.env.EnvironmentPostProcessor=package.to.environment.config.EnvironmentConfig
您所需要的只是添加自定义PropertySource:
选项2:通过属性资源占位符配置器执行此操作:
负责解析这些占位符的类是名为
PropertySourcesPlaceholderConfigurer
的BeanPostProcessor(请参见here)。因此,您可以覆盖它并提供自定义的
PropertySource
,它将解析您所需的属性,如下所示:8xiog9wr2#
使用
ConfigurationProperties
作为你的属性,并通过一个api修改它,如下所示: