Конфигурация Spring Cloud + шина дважды вызывает сервер конфигурации при создании связывателя

Я создал простой проект, используя 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 создает свой контекст с инициализатором PropertySourceBootstrapConfiguration, загруженным слушателем BootstrapApplicationListener.

Итак, мой вопрос: это ожидаемое поведение? Я предполагаю, что клиент конфигурации должен сделать только один запрос к серверу при запуске. Если это не правильно, почему причина этого?

Версии, которые я использую, включены в: Spring-Cloud-зависимости, версия Edgware.RELEASE

Спасибо заранее!

1 ответ

Да; это ожидается; средство связывания потоков облачной среды загружается в собственное приложение Spring Boot (оно может иметь различные переменные среды).

Другие вопросы по тегам