【发布时间】:2018-11-28 20:39:34
【问题描述】:
我目前正在使用 EnvironmentPostProcessor 添加我的外部 PropertySource,代码如下所示:
public class ExternalPropertySourceEnvironmentPostProcessor implements EnvironmentPostProcessor
{
private static final String EXTERNAL_PROPERTY_SOURCE_NAME = "ExternalPropertySource";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application)
{
if (environment.acceptsProfiles(Profiles.EXTERNAL_PROPERTY_SOURCE_ENABLED_PROFILE)) {
environment.getPropertySources()
.addLast(new ExternalPropertySource(EXTERNAL_PROPERTY_SOURCE_NAME, new ExternalSource()));
}
}
}
一个 spring.factories 也用于注册这个 EnvironmentPostProcessor。
如果在 vm 环境变量中设置了配置文件,则此代码实际上可以工作,但是如果将其添加到 src/main/resources/application.yml 中,则配置文件似乎还没有注入环境中,并且没有由 environment.getActiveProfiles() 返回。我尝试过使用优先级最低的 Ordered 接口,但没有帮助。
为了围绕我想要实现的目标添加一些上下文,这个类位于一个小型库中,它添加了一个外部属性源,如数据库。然后我们可以在其他一些 Spring Boot 应用程序中使用它。像 Spring Cloud Config 这样的东西。
我想要一种干净的方法来启用或禁用此属性源,具体取决于代码运行的环境。我不介意使用其他东西然后配置文件甚至其他方式来注入属性源,我只想要一些不依赖于几个因素的干净的东西。
我现在代码中的主要问题是我正在使用spring boot's property sources 使我自己的属性源可配置。
更新:我使用 Spring Cloud 应用程序来调试它,并且将引导上下文与正常的 Spring 引导上下文混淆了。请参阅下面的答案。
【问题讨论】:
标签: java spring spring-boot spring-cloud