В настоящее время у меня есть приложение OSGi, насчитывающее около 300 пакетов приложений (многомодульный проект Maven), и моя цель — перенести его из OSGi в монолит Spring Boot. Приложение OSGi использует Spring, а службы и ссылки OSGi указываются с помощью Spring DM.
Мне удалось довольно легко перенести подмножество (около 10%), поскольку все службы поддерживаются bean-компоненты, и все ссылки уже помечены @Autowired. К сожалению, большая часть конфигурации Spring находится в XML. Это означает, что идентификаторы многих компонентов явно указаны (что не позволяет легко использовать полное имя класса в качестве имени компонента).
Цель состоит в том, чтобы в конечном итоге создать отдельные микросервисы Spring Boot для каждый из отдельных компонентов приложения, но было бы полезно делать это постепенно. Вместо того, чтобы сразу переходить от OSGi к отдельным микросервисам, наша команда планирует сделать это поэтапно и сначала перейти от OSGi, а затем перейти от монолита к микросервисам (мы предпочли бы сделать два шага по 6 месяцев, чем один 10- или 12-месячный шаг). -месяц).
Меня беспокоит следующее:
- Глобальное пространство имен bean-компонентов: Когда Службы OSGi удалены, каждый компонент будет виден каждому модулю. Это может привести к коллизиям или затенению, когда один компонент маскирует другой. Аналогичная проблема заключается в том, что наши контроллеры дополняются bean-компонентами @ControllerAdvice, которые обрабатывают исключения. Несовместимость может возникнуть, если разные bean-компоненты @ControllerAdvice по-разному обрабатывают одно и то же исключение.
- Исполняемые файлы: по умолчанию, если я создаю исполняемый файл Spring Boot. Jar, он обернет все свои зависимости в один Jar. В идеале мы предпочли бы иметь автономный Jar, в котором мы могли бы указать каталог, содержащий все зависимости, необходимые для выполнения Jar. Это позволило бы нашей команде заменить один или два из трехсот Jars при отладке/устранении неполадок, а не перекомпилировать все приложение.
Спасибо за ваша помощь.
Источник: https://stackoverflow.com/questions/781 ... t-monolith