Как сохранить одинаковую версию Spring Boot на всех микросервисах? - PullRequest
1 голос
/ 30 апреля 2019

Я создаю одно приложение с использованием микросервисной архитектуры. Мне было интересно, сможем ли мы управлять одной версией Spring Boot для всех микросервисов. Я просто не хочу упоминать версию Spring Boot в pom.xml при создании нового микросервиса. Если мы сможем управлять версией Spring Boot в одном месте, тогда она будет гарантировать, что все микросервисы используют одну и ту же версию Spring Boot, и ее будет легко обновить для всех микросервисов.

Как это сделать, если это возможно?

Это хорошая практика?

Ответы [ 7 ]

1 голос
/ 30 апреля 2019

Несмотря на то, что «независимость» является важным значением в микросервисном ландшафте, это не означает, что предпочтительным является безудержное дублирование кода.Выберите меньшее из двух зол и создайте родительский проект, который содержит только файл POM (без кода Java), и пусть все микросервисы используют этот POM в качестве родительского POM.В этом родительском файле pom вы можете объявить все версии всех зависимостей, используя тег <dependencyManagement>, и все версии плагинов, используя тег <pluginManagement>.Эти теги на самом деле не добавляют никаких зависимостей или плагинов к вашему реальному проекту, они просто объявляют версии, которые будут использоваться, если проект слишком сильно зависит от них.

Если вы используете spring-boot-starter pomкак ваш родитель уже, это может работать транзитивно: у ваших микросервисов есть родительский pom, а у вашего родительского pom есть стартовый pom пружинного загрузчика в качестве собственного родителя.

Если в какой-то момент в будущем один микросервис должен расходитьсяиз этого родительского pom для одной или нескольких конкретных зависимостей вы можете объявить новую версию в pom этого проекта, и вместо этого будут использоваться эти значения, эффективно перезаписывая то, что объявлено в родительском pom (ах), так что вы не потеряете эту гибкость.

Однако мы уже два года работаем с микросервисами с пружинной загрузкой, и поддержание согласованности и простоты одновременного обновления оказалось для нас более ценным, чем независимость.

1 голос
/ 30 апреля 2019

Если вы действительно хотите это сделать, вы можете использовать Maven для создания отдельных приложений (микросервисов), используя родительский POM и Maven Управление зависимостями функция ( Управление зависимостями - не то же самое, что Depdencies ) для управления используемой версией Spring Boot.

Однако вы должны , а не строго требовать, чтобы все микросервисы использовали одну и ту же версию Spring Boot. Если вы сделаете это, и одно из микросервисов должно использовать более новую версию Spring Boot (например, потому что оно имеет новую важную функцию), вы заставите все микросервисы обновляться одновременно. Одно из ключевых преимуществ микросервисов заключается в том, что каждый микросервис можно создавать, обновлять и обновлять развертывания по отдельности, поэтому вы лишите свою систему этого преимущества.

Сделано правильно, однако, это может дать вам лучшее из обоих миров.

  • Старые микросервисы могут продолжать использовать старую версию родительского POM.
  • Новые и обновленные микросервисы могут использовать новую версию родительского POM.
  • Легко увидеть, использует ли микросервис (очень) старую версию родительского POM, и поэтому его следует обновить.
  • Текущая версия родительского POM может указывать, какие версии зависимостей вы считаете «наилучшей практикой».

Однако, не поддавайтесь искушению использовать многомодульную структуру Maven , потому что тогда вы заставите микросервисы использовать одну и ту же версию Spring Boot, которая вводит слишком много связи в здании каждого микросервиса.

1 голос
/ 30 апреля 2019

Как это сделать, если это возможно?

С родительским pom Maven / Gradle, который определяет все версии и зависимости, которые наследуют микросервисные проекты.

Это хорошая практика?

Да, с определенной мерой.
Это хорошая идея, потому что использование согласованных версий зависимостей через набор проектов, которые вы разрабатываете / поддерживаете, является хорошей идеей.
Но это не означает, что все проекты будут использовать в одно и то же время одну и ту же версию родительского ПОМа, но в идеале они должны стремиться использовать последнюю версию этого программного обеспечения так же, как и последняя версия вашего родительского ПОМа. использовать последнюю стабильную версию Spring Boot.

0 голосов
/ 30 апреля 2019

Как вариант, и если вы используете частный репозиторий Maven, вы можете установить одну версию артефакта для всех библиотек Spring, которые вы используете (даже более того, вы можете пометить их все как свою пользовательскую версию).Тогда во всех ваших проектах просто используйте этот тег в зависимостях.

0 голосов
/ 30 апреля 2019

Вы должны использовать parent / child pom.xml. ( pom help doc )

Определите родительский pom-файл и объявите все его версии (в теге properties). Что-то вроде:

<properties>
  <spring.version>5.0.5.RELEASE</spring.version>
  <.....>
</properties>

И в каждом из ваших проектов используйте родительский pom, а при объявлении зависимостей используйте что-то вроде:

<dependency>
  <groupod>xyz</groupid>
  <artifactid>xyz</artifactid>
  <version>${spring.version}</version>
</dependency>

Это поможет, если вы хотите обновить набор библиотек, вам нужно будет обновить только в одном месте и пересобрать все ваши проекты.

0 голосов
/ 30 апреля 2019

В микросервисах такого нет. Вам нужно знать и сохранять одну и ту же версию при создании любого нового микросервиса.

0 голосов
/ 30 апреля 2019

Для каждого микросервиса у них должна быть своя версия. Каждый микросервис должен иметь свой собственный цикл обновления. Если вы в конечном итоге создаете общий проект, определяющий версию весенней загрузки. Различные микросервисы не могли продолжать использовать новые функции весной, а также другие структуры, которые могут зависеть от конкретных версий пружины

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...