2015-10-02 10 views
5

Chcę zaimplementować architekturę wtyczek w aplikacji Spring Boot. Pozwól mi wyjaśnić mój scenariusz. Mam główną aplikację, która uruchamia serwer, zarządza bezpieczeństwem itd. Aplikacja jest jak katalog główny mojego produktu końcowego, który będzie zawierał tę aplikację root i inne wtyczki do niej dodane.Implementowanie architektury wtyczek w aplikacji Spring Boot z adnotacjami

Teraz wtyczki są samą aplikacją Spring Boot, którą mogę dodać do aplikacji root przez dynamiczne wyszukiwanie słoików w określonej ścieżce lub przez dodanie ich do zależności projektu jako biblioteki.

Wtyczki mają własne konfiguracje i przypominają aplikacje działające w głównej aplikacji root. Załóżmy, że jeśli aplikacja root uruchamia serwer, aplikacja wtyczki może zawierać wszystkie kontrolery (punkty końcowe), komponenty bean itp., Które zapewniają funkcjonalność mojego produktu.

Jest to przesłanka, teraz to, co chcę wiedzieć,

  1. jaki sposób można osiągnąć tę architekturę?
  2. W jaki sposób aplikacja root będzie komunikować się z wtyczkami?
  3. Czy będą miały osobne konteksty aplikacji?
  4. Jak mogę uruchomić i skonfigurować aplikację dla dzieci z poziomu aplikacji root?
  5. Gdy aplikacja otrzymuje żądanie od klientów, w jaki sposób mogę skierować żądanie do konkretnego kontrolera wewnątrz określonej wtyczki, biorąc pod uwagę, że mogę mieć wiele wtyczek.

Jestem zdezorientowany tym pojęciem i jak może działać. Wszelka pomoc jest doceniana. Jeśli istnieje przykład, który każdy może zapewnić, będzie to po prostu cudowne.

+2

Mam zamiar wdrożyć podobny system wtyczek.Znalazłeś rozwiązanie? – rvit34

Odpowiedz

5

jak opisano w Java dyanmically load plugin masz opcje holowania:

  1. przechodząc drogę OSGi, która przyjmuje wszystkie pytania pod uwagę, ale może być nieco trudne do połączenia z wiosennego startu
  2. Korzystanie ServiceLoader

Przynajmniej w przypadku drugiego podejścia każdy plik jar powinien implementować ten sam interfejs, za pomocą którego można zarejestrować zawartość pliku jar (podobnie jak w przypadku metody początkowej pakietu OSGi). W ten sposób można oddzielić kontekst aplikacji dla każdego pliku JAR i udostępnić go tylko podczas uruchamiania (można na przykład utworzyć hierarchię kontekstów, w której dodaje się kontekst dodanego słoika do kontekstu głównego).

Twój ostatni punkt może być trudny, ponieważ musisz wziąć pod uwagę, że wiele usług może spełnić to samo żądanie. Ponowne pobranie listu z OSGi zwykle jest definiowane przez wspólny interfejs, a implementacje mają coś takiego jak priorytet, który wskazywałby, która usługa powinna być używana, jeśli jest więcej niż jeden. Oczywiście istnieją inne podejścia, które można zdefiniować, aby wybrać jedną lub drugą.