创建活页夹时,Spring cloud config +总线调用两次到配置服务器

时间:2018-01-23 16:26:59

标签: java spring-boot spring-cloud-stream spring-cloud-config

我使用spring-cloud-config和spring-cloud-bus创建了一个简单的项目。出于某种原因,配置客户端调用两次配置服务器。第一次发生在创建引导程序的上下文(预期行为是什么)时,但是第二次在创建活页夹的上下文时调用。

这在课堂上完成:

DefaultBinderFactory#getBinderInstance:

// If the environment is not customized and a main context is available, we
// will set the latter as parent.
// This ensures that the defaults and user-defined customizations (e.g. custom
// connection factory beans)
// are propagated to the binder context. If the environment is customized,
// then the binder context should
// not inherit any beans from the parent
boolean useApplicationContextAsParent = binderProperties.isEmpty() && this.context != null;
if (useApplicationContextAsParent) {
    springApplicationBuilder.parent(this.context);
}
if (useApplicationContextAsParent || (environment != null && binderConfiguration.isInheritEnvironment())) {
    if (environment != null) {
        StandardEnvironment binderEnvironment = new StandardEnvironment();
        binderEnvironment.merge(environment);
        springApplicationBuilder.environment(binderEnvironment);
    }
}
ConfigurableApplicationContext binderProducingContext = springApplicationBuilder
        .run(args.toArray(new String[args.size()]));

何时执行以下声明:

ConfigurableApplicationContext binderProducingContext = springApplicationBuilder
    .run(args.toArray(new String[args.size()]));

据我在代码中看到,绑定器的上下文与应用程序的上下文不同。似乎再次调用配置服务器的原因是spring-cloud-context使用由侦听器 BootstrapApplicationListener 加载的初始化器 PropertySourceBootstrapConfiguration 创建其上下文。

所以,我的问题是:这是预期的行为吗?我假设配置客户端在启动时应该只向服务器发出一个请求。如果不正确,为什么会这样呢?

我使用的版本包含在: spring-cloud-dependencies,版本Edgware.RELEASE

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

是;它的预期; spring cloud stream binder被加载到它自己的Spring Boot应用程序中(它可以有不同的环境变量)。