Динамическая загрузка модулей в Java

В Java я могу динамически добавлять элементы в путь к классам и загружать классы («динамически» означает без перезапуска моего приложения). Есть ли известный фреймворк / библиотека, которая занимается динамической загрузкой / выгрузкой модулей без перезапуска?

Обычная настройка, особенно для веб-приложений, - это балансировка нагрузки, несколько экземпляров приложения и постепенное развертывание и перезапуск новой версии. Я ищу что-то другое - приложение с несколькими службами / плагинами, возможно, настольное приложение с одним экземпляром, где отключение одной службы обходится дешево, но отключение или перезапуск всего приложения невозможно.

Я думаю о типичной инфраструктуре плагинов, где плагины можно обновлять или устанавливать без перезапуска приложения. Мне нужно программировать это с нуля, или что-то уже доступно? Совместимость с Spring и открытый исходный код - это плюс, но не требование.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
0
3 125
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете рассмотреть возможность запуска вашего весеннего приложения в Фреймворк OSGI.

Я считаю, что DMServer - это модульный сервер приложений Java, который предназначен для запуска корпоративных приложений Java и приложений на основе Spring, основанных на OSGI.

Вы можете найти более подробную информацию в этой статье Здравствуйте, OSGi, часть 2: Введение в динамические модули Spring, в частности, как использовать Spring DM для динамической установки, обновления и удаления модулей в работающей системе.


Примечание: когда вы говорите о том, что «плагины можно обновлять или устанавливать без перезапуска приложения», OSGI - это первая подходящая среда, которая приходит на ум.

Все дело в модульном разделении приложений на более мелкие пакеты. Каждый пакет представляет собой тесно связанную, динамически загружаемую коллекцию классов, jar-файлов и файлов конфигурации, которые явно объявляют свои внешние зависимости. (если есть).

Возможно, самый простой подход - загрузить каждый плагин собственным загрузчиком классов. Затем откажитесь от загрузчика классов и создайте новый, чтобы перезагрузить плагин. Вам понадобятся методы init () и destroy () в API плагина, чтобы обеспечить возможность функциональности типа запуска / завершения.

Это также имеет то преимущество, что плагины изолированы друг от друга.

URLClassLoader - ваша отправная точка для этого. Общая идея заключается в том, что вы предоставляете суперкласс XxxPlugin, который является подклассом любого плагина. Рассмотрим пример Applet, который по сути является плагином GUI (или Midlet и т. д.).

Другие вопросы по теме