Как переопределить applicationContext.getId () с помощью Spring Boot 2.0?

Недавно мы обновились до Spring boot 2.0 и заметили, что идентификаторы контекста приложения больше не уникальны. Раньше, если мы устанавливали spring.application.index, ContextIdApplicationContextInitializer использовал бы это для создания идентификатора контекста приложения. Теперь я вижу, что весной 2.0 реализация была существенно изменена. Как лучше всего установить идентификатор? Цель состоит в том, чтобы включить имя хоста как часть идентификатора, чтобы системы были различимы. Документы весенних облаков по-прежнему относятся к старому: Идентификатор службы должен быть уникальным.

ОБНОВИТЬ Раньше происходило то, что spring.application.name был установлен в исходном коде проекта (т.е. my-app), а spring.application.index был установлен во время выполнения (например, 1e4f630be), тогда applicationContext.id имел значение my-app-1e4f630be. Теперь он всегда имеет значение my-app-1. Реализация ContextIdApplicationContextInitializer больше не ссылается на spring.application.index. Это значительное изменение между версиями, и я не нашел примеров или документации о том, как правильно настроить идентификатор с помощью Spring boot 2.0.

Рассматривали ли вы возможность установки spring.application.name и включения имени хоста в его значение?

Andy Wilkinson 19.12.2018 18:20

По умолчанию Spring Cloud использует spring.application.name для идентификации экземпляров службы как одного типа. Также по умолчанию мы создаем идентификатор экземпляра, используя ${spring.application.name}:${hostname}:${spring.application.‌​instance_id:${server‌​.port}}. Так что он должен быть уникальным. Вы видите иначе?

spencergibb 19.12.2018 20:01

@spencergibb, который звучит как код в Spring boot 1.5, но в 2.0 он другой.

pgreen2 19.12.2018 20:48

@AndyWilkinson, я могу попробовать, это похоже на работу. Я надеялся, что мы сможем установить spring.application.name, чтобы иметь истинное имя моих приложений (myapp), но тогда идентификатор будет уникальным, то есть myapp: machine1 или myapp: machine2

pgreen2 19.12.2018 20:49

@ pgreen2 это то, что сейчас делает код. Вы не сказали, что происходит.

spencergibb 20.12.2018 00:35

@spencergibb мы говорим об одной и той же версии? Я смотрю на github.com/spring-projects/spring-boot/blob/master/…, который больше не использует упомянутый вами код.

pgreen2 20.12.2018 01:54

Нет, я смотрю на класс IdUtils в весеннем облачном сообществе, который пытается создать уникальный идентификатор экземпляра.

spencergibb 20.12.2018 05:09

Цитата из https://github.com/spring-cloud/spring-cloud-consul/blob/mas‌​ter/docs/src/main/as‌​ciidoc/spring-cloud-‌​consul.adoc#making-t‌​he-consul-instance-i‌​d-unique: «По умолчанию идентификатор контекста приложения Spring равен $ {spring.application.name}: запятые, разделенные запятыми, профили: $ {server‌ .port}». Есть ли возможность реализовать это задокументированное поведение? Я хотел бы перезаписать contextId, но не applicationName.

user3105453 28.01.2019 20:50
4
8
900
0

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