Задать вопрос

Как сделать динамически модульное приложение Spring Boot?

Добрый день.
Нужно сделать модульное приложение на Spring framework, т.е. есть приложение Spring-Boot, и есть например модули в виде jar файлов в директории сервера(например modules). При запуске приложения нужно забрать все jar файлы и импортировать их в приложение в виде компонентов(плагинов) которые будут расширять функциональность приложения.
Первым делом я сделал загрузку jar файлов используя java.net.URLClassLoader, но работать с классами я могу только через рефлексию, что не подходит так как я использую аннотация вместо xml файлов, а через рефлексию аннотации не работают.
Получается что в модулях я даже не могу внедрять зависимости например:
@PersistenceContext
private EntityManager em;

Я наткнулся на osgi framework но при его использовании нужно отказаться от использования Spring-Boot, плюс ко всему говорят, что там не работают все аннотации и придётся использовать xml, что не хотелось бы. Мы наоборот хотим избавится от всех xml файлов и сделать проект на аннотациях и java классах.
И что ещё пугает osgi так это его монструозность и заморочки в зависимости для которых придётся делать свои bundle это ещё куча потраченного времени и уверен что без проблем не обойдётся и плюс время на изучение.

Пример проекта на github: https://github.com/Stanyslav/spring-boot-multiple-...
  • Вопрос задан
  • 1781 просмотр
Подписаться 4 Оценить Комментировать
Решения вопроса 1
либо я не понял сути вашего вопроса, либо вам нужно посмотреть в сторону spring.factories
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Используйте SPI https://habrahabr.ru/post/118488/, это самый что ни на есть простой и стандартный способ регистрировать ваши модули в вашей глобальной системе. Также советую просто использовать gradle с его модульной системой и стандартным плагином application, который позволяет собирать ваши приложение с модулями (jar). Все jar модули будут находиться в папке lib и прекрасно работать в рамках Spring Boot.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы