Конфигурация 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 (оно может иметь различные переменные среды).