Есть ли шаблон для динамически загружаемых модулей в Spring Boot?

#java #spring #spring-boot #module #osgi

#java #весна #spring-boot #модуль #osgi

Вопрос:

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

Каким будет рекомендуемый шаблон для этого, и какая хорошая структура поможет справиться с этим? Является ли OSGi вариантом?

Комментарии:

1. а как насчет того, если вы используете архитектуру на основе плагинов

2. Звучит хорошо! Продолжить…

3. Вы также можете взглянуть на Plugin Framework для Java (PF4J) .

Ответ №1:

Боюсь, что нет 100% решения. Возможно, есть несколько вариантов; позвольте мне выделить следующие три:

  1. Существуют фабрики Spring, способ (автоматической) настройки ваших компонентов.

  2. Другой интересный подход заключается в том, как Spring Boot обрабатывает расширения сам по себе — имея свои собственные пусковые устройства spring-boot, как в этой статье : https://blog.codecentric.de/en/2014/11/extending-spring-boot-five-steps-writing-spring-boot-starter /, в сочетании с пружинными фабриками вы могли бы

  3. Наиболее похожим на плагин решением является spring-plugin-project . Однако, похоже, поддерживается только загрузка, некоторые другие функции, такие как управление версиями, также отсутствуют. Так что вам, вероятно, придется создавать его самостоятельно.

Итак, основная проблема может заключаться в выгрузке и обновлении этих вещей во время выполнения, что подводит меня к последнему наблюдению:

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