Implementierung von plugin-Architektur in annotation-basierte Spring-Boot-Anwendung
Ich umsetzen will, plugin-Architektur, die in Spring-Boot-Anwendung. Lassen Sie mich erklären, mein Szenario. Ich habe eine Hauptanwendung, die den server gestartet, verwaltet die Sicherheit, etc. Die app ist wie die Wurzel meiner Endprodukt, die auch diese root-app und andere plugins Hinzugefügt werden.
Nun, die plugins sind Spring-Boot-Anwendung selbst, was ich kann hinzufügen, um die root-app, indem Sie dynamisch die Suche nach Gläser in der bestimmten Weg oder addiert Sie zu Projekt-Abhängigkeit als Bibliothek.
Plugins haben Ihre eigenen Konfigurationen und sind wie apps, die innerhalb der Haupt-root-app. Lassen Sie uns sagen, ob die root-app, die den server betreibt, die plugin-app haben alle Steuerungen (Endpunkte), Bohnen etc Funktionen anbieten, die zu meinem Produkt.
Dies ist die Prämisse, was ich jetzt wissen möchte ist,
- Wie kann ich erreichen, das die Architektur?
- Wie wird die root-app kommunizieren Sie mit den plugins?
- Haben Sie separate anwendungskontexte?
- Wie kann ich das Booten und konfigurieren Kind app aus dem root-app?
- Wenn die Anwendung empfängt die Anforderung von clients wie kann ich route die Anfrage zu bestimmten controller im speziellen plugin bedenkt, dass ich kann haben viele plugins.
Ich bin verwirrt über das Konzept hier, und wie es funktionieren kann. Jede Art von Hilfe ist willkommen. Wenn es ein Beispiel, dass jemand bieten kann, das wird einfach wunderbar.
- Werde ich umsetzen, das ähnliche plugin-system. Hast du eine Lösung finden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Beitrag wurde vor 3 Jahren. Ich würde jedoch gerne diese zu beantworten für jemanden, der auf der Suche nach einer Lösung für ein ähnliches Szenario.
Es scheint, dass pf4j das ist ein plugin-framework, das für Sie geeignet ist. Neben der Unterstützung native app, hat es auch spring-pf4j, so können Sie es in den Frühling.
URL: https://pf4j.org
Wie beschrieben in Java dyanmically load plugin Sie haben Schlepptau Optionen:
Zumindest für den zweiten Ansatz, die einzelnen jar-Datei sollte implementieren die gleiche Schnittstelle, die Sie verwenden können, registrieren Sie den Inhalt der jar-Datei (ähnlich der start-Methode der ein OSGi-bundle). Auf diese Weise können Sie trennen Sie die Anwendungs-Kontext für die einzelnen jar-Datei und nur Sie auf Start (Sie könnte zum Beispiel das anlegen eines context-Hierarchie, in dem Sie fügen Sie die zusätzlichen jar-Kontext, um den root-Kontext).
Ihrem letzten Punkt könnte eine knifflige Sache, wie Sie haben zu berücksichtigen, dass es mehrere Dienstleistungen, die erfüllen den gleichen Wunsch. Unter ein Blatt von OSGi wieder diese Dienste sind in der Regel definiert durch eine gemeinsame Schnittstelle und die Implementierungen so etwas wie eine Priorität, was darauf hindeuten würde, welcher Dienst verwendet werden soll, wenn es mehr als eins. Natürlich gibt es auch andere Ansätze, die Sie definieren können, um das eine oder andere entscheiden.
Gibt es zwei mögliche option
1. Mit spring-plugin können Sie erreichen OSGi-feature.
https://github.com/spring-projects/spring-plugin
2. mit mirco-boot, die spring-boot-back-end und mircoserver front-end. darüber hinaus bieten die plugin-support wie pro Ihre Anforderung. Sie erkunden können
https://github.com/aol/micro-server/tree/master/micro-boot