Репозиторий к докладу на JPoint 2025 Модульный монолит: как построить гибкое Java-приложение с hot reload
E-mail: icanitgs@gmail.com
Telegram: https://t.me/icanit
Тут указаны ссылки на ресурсы которые использовались в докладе или же могут быть полезны в контексте темы доклада.
< 9526 ul dir="auto">Данный код собран из моей личной песочницы в рамках которой я тестировал плагинную архитектуру. Данный реп представляет собой прототип монорепы, в которой содержатся как и родительское приложения, так и плагины.
Тут находится springboot приложение которое позволяет запускать внутри себя инстанс плагина. Для простоты оно поддерижвает только один инстанс плагина внутри себя, хотя ничего не мешается переписать инициализацию с конфигурацией и запускать несколько плагинов.
в _conf/application.yml находится пример конфига этого приложения, который, в том числе, содержит настройки для запуска плагина. При запуске приложение вычитывает директорию с плагинами, которая в примере настроена на директорию куда gradle собирает плагины (см. gradle таску bundlePlugin)
Приложение также поддерживает вычитку репозитория с плагинами, но для этого нужено поднять nexus/reposilite и в него публишить собираемые плагины. (см. gradle таску publishPlugin)
Тут содержатся билд скрипты для упрощения конфигурирования подпроектов в gradle
Тут содержатся разные утилиты для упрощения работы с сущностями в коде + базовые классы для плагинной системы.
Тут содержатся интерфейсы плагинов, а также интерфейсы бинов, которые ядро может инжектить в контекст плагина т.е. по факту Plugin API и Core API
Тут находятся подпроекты плагинов, gradle корневого проекта настроен так, что все подпроекты в этой директории сами добавляются автоматически в корневой проект
Сначала нужно собрать плагины, вызывав:
gradle bundlePlugin
после чего можно запускать
JavaPluginApp не забыв указать пусть к конфигу ./_conf/application.yml
В данном репозитории в директории ./_run хранится конфигурации запуска для IDEA для бандлинга плагинов и запуска приложения.
Приложение содержит внутри себя swagger-ui, который доступен url: http://localhost:8080/swagger-ui/index.html
после его запуска.
Через него можно дергать методы менеджера плагинов и эмулировать запрос к самому плагину и смотреть его результат.
Например:
curl -X 'POST' \
'http://localhost:8080/api/plugin/action/doSomething' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d 'foo'
вернет результат:
{
"data": "Bar",
"error": null,
"success": true
}
com.paidora.app.services.plugin.PluginsManager - тут по факту код отвечающий за жизненый цикл работы с плагинами.
com.paidora.framework.modules - это классы базового каркаса для работы с плагинами которые уже нас стороне
приложения нужно переопределить и подтюнить под конкретную задачу.
примеры реализации плагинов в:
com.paidora.modules.plugins.foobar.FoobarPlugin
com.paidora.modules.plugins.helloworld.HelloWorldPlugin