2017-08-28 12 views
5

Idę przez samouczek Wiosna Microservices i ma następującą linię w nim:Kiedy używamy narzędzia SpringApplicationBuilder?

new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args); 

Większość czasu widzę to do uruchamiania aplikacji Wiosna boot:

SpringApplication.run(Application.class, args); 

To jest pierwszy raz widziałem SpringApplicationBuilder. Kiedy powinniśmy używać tego w ogóle?

+1

Czy czytasz Javadocs na zajęciach? – chrylis

+1

Zrobiłem. Wygląda to tak, jakby były podobne klasy, ale SpringApplicationBuilder oferuje większą kontrolę, jeśli chodzi o profile itp.W tym przypadku jednak wygląda na to, że ZuulApplication prawdopodobnie byłoby dobrze z samą aplikacją SpringApplication, ale autor wybrał użycie SpringApplicationBuilder ...? – Ole

+0

W tym przypadku wygląda na to, że użycie jest niepotrzebne. Parametr 'web' jest zwykle automatycznie określany na podstawie tego, czy dostępne są odpowiednie zależności; jawne ustawienie go na "true" spowoduje, że uruchomienie się nie powiedzie lub będzie zbędne. – chrylis

Odpowiedz

2

W naszej aplikacji użyliśmy aplikacji SpringApplicationBuilder w aplikacji starter. starter to prosta aplikacja, która uruchamia właściwe instancje aplikacji programowo.

Liczba uruchomionych procesów i typ procesu web/standalone zostaną przekazane jako argument do aplikacji starter, w oparciu o argumenty uruchamiania instancji aplikacji. użyliśmy -w, aby rozpocząć jako aplikacja internetowa do zarządzania państwem.

boolean isWeb = // options parser, parse -w 
new SpringApplicationBuilder(SpringBootAngularApp.class).web(isWeb).run(args); 

Jest jeszcze inny sposób robi to samo

SpringApplication sp = new SpringApplication(SpringApplicationBuilder.class);  
sp.setWebEnvironment(false); 
sp.run(args); 

Możemy również dostosować transparent, rejestratory z SpringApplicationBuilder.

odczytać doc więcej użytkowania

2

Powiedzmy, że trzeba rozwiązać problem, gdzie trzeba pracować z wieloma bazami danych lub struktur i każdy z nich musi być odizolowane od innych, w tym przypadku użyłbym podejście SpringApplicationBuilder, ponieważ każda domena może być izolowana poprzez utworzenie kontekstu rodzica i podrzędnego i nie ma potrzeby mieszania różnych problemów związanych z domeną, na przykład można mieć konfigurację Aplikacji 1 i Aplikacji2, z których każda ma własne domeny, kontrolery i repozytoria ale nie chcesz mieszać całej tej komplikacji i zamiast tego możesz utworzyć dwie różne konfiguracje z SpringApplicationBuilder

SpringApplicationBuilder appBuilder = new SpringApplicationBuilder() 
     .sources(Parent.class); 

appBuilder.child(Application1.class).run(args); 
appBuilder.child(Application2.class).run(args); 

Niektóre informacje dodatkowe: Post with an example of SpringApplicationBuilder, Java Doc of SpringBuilder i Other example of how use SpringApplicationBuilder

2

Jednym z typowych przypadków użycia, które natknąłem się kiedy chcesz mieć tradycyjny plik WAR rozmieszczania zostać wdrożony w Weblogic etc - Traditional deployment

Z SpringApplication, większość ustawień aplikacji ma ustawione na sztywno wartości domyślne, takie jak profile i pliki właściwości do użycia itd. Aby to zrozumieć, należy zapoznać się z kodem tej klasy.

Dzięki można po prostu zmienić kilka z tych domyślnych ustawień aplikacji przed uruchomieniem aplikacji, mimo że większość tych ustawień ma rozsądne wartości domyślne. Dzięki kilku linijkom kodu można tworzyć różne aplikacje z różnymi ustawieniami dla różnych celów (osadzanie, wdrażanie zewnętrzne, testowanie itp.), Podczas gdy rzeczywisty logika biznesowa pozostaje taka sama.

Powiązane problemy