Недавно мы обновились до 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 Cloud использует spring.application.name для идентификации экземпляров службы как одного типа. Также по умолчанию мы создаем идентификатор экземпляра, используя ${spring.application.name}:${hostname}:${spring.application.instance_id:${server.port}}. Так что он должен быть уникальным. Вы видите иначе?
@spencergibb, который звучит как код в Spring boot 1.5, но в 2.0 он другой.
@AndyWilkinson, я могу попробовать, это похоже на работу. Я надеялся, что мы сможем установить spring.application.name, чтобы иметь истинное имя моих приложений (myapp), но тогда идентификатор будет уникальным, то есть myapp: machine1 или myapp: machine2
@ pgreen2 это то, что сейчас делает код. Вы не сказали, что происходит.
@spencergibb мы говорим об одной и той же версии? Я смотрю на github.com/spring-projects/spring-boot/blob/master/…, который больше не использует упомянутый вами код.
Нет, я смотрю на класс IdUtils в весеннем облачном сообществе, который пытается создать уникальный идентификатор экземпляра.
Цитата из https://github.com/spring-cloud/spring-cloud-consul/blob/master/docs/src/main/asciidoc/spring-cloud-consul.adoc#making-the-consul-instance-id-unique: «По умолчанию идентификатор контекста приложения Spring равен $ {spring.application.name}: запятые, разделенные запятыми, профили: $ {server .port}». Есть ли возможность реализовать это задокументированное поведение? Я хотел бы перезаписать contextId, но не applicationName.
Рассматривали ли вы возможность установки
spring.application.nameи включения имени хоста в его значение?