Programové reštartovanie aplikácie Spring Boot

1. Prehľad

V tomto tutoriáli si ukážeme, ako na to programovo reštartujte aplikáciu Spring Boot.

Reštartovanie našej aplikácie môže byť v niektorých prípadoch veľmi užitočné:

  • Opätovné načítanie konfiguračných súborov po zmene niektorého parametra
  • Zmena aktuálne aktívneho profilu za behu programu
  • Z akéhokoľvek dôvodu opätovná inicializácia kontextu aplikácie

Aj keď tento článok popisuje funkčnosť reštartovania aplikácie Spring Boot, nezabudnite, že máme tiež skvelý návod na vypnutie aplikácií Spring Boot.

Teraz poďme preskúmať rôzne spôsoby, ako môžeme implementovať reštart aplikácie Spring Boot.

2. Reštartujte vytvorením nového kontextu

Našu aplikáciu môžeme reštartovať tak, že zatvoríme kontext aplikácie a vytvoríme úplne nový kontext. Aj keď je tento prístup dosť jednoduchý, sú niektoré jemné detaily, s ktorými si musíme dať pozor, aby to fungovalo.

Pozrime sa, ako to implementovať v hlavný metóda našej aplikácie Spring Boot:

@SpringBootApplication verejná trieda Aplikácia {súkromný statický kontext ConfigurableApplicationContext; public static void main (String [] args) {context = SpringApplication.run (Application.class, args); } public static void restart () {ApplicationArguments args = context.getBean (ApplicationArguments.class); Thread thread = new Thread (() -> {context.close (); context = SpringApplication.run (Application.class, args.getSourceArgs ());}); thread.setDaemon (false); thread.start (); }}

Ako vidíme na vyššie uvedenom príklade, je dôležité znovu vytvoriť kontext v samostatnom vlákne, ktoré nie je démon - týmto spôsobom zabránime vypnutiu JVM vyvolanému Zavrieť od ukončenia našej aplikácie. V opačnom prípade by sa naša aplikácia zastavila, pretože JVM nečaká na ukončenie vlákien démona skôr, ako ich ukončí.

Ďalej pridajme koncový bod REST, prostredníctvom ktorého môžeme spustiť reštart:

@RestController verejná trieda RestartController {@PostMapping ("/ restart") public void restart () {Application.restart (); }}

Tu sme pridali radič s metódou mapovania, ktorá vyvoláva náš reštart metóda.

Potom môžeme zavolať náš nový koncový bod na reštartovanie aplikácie:

curl -X POST localhost: port / restart

Samozrejme, ak pridáme taký koncový bod do aplikácie v reálnom živote, budeme si ho musieť tiež zabezpečiť.

3. Koncový bod reštartu aktuátora

Ďalším spôsobom, ako reštartovať našu aplikáciu, je použitie vstavaného RestartEndpoint od Pohon pružín.

Najskôr pridajme požadované Maven závislosti:

 org.springframework.boot spring-boot-starter-aktor org.springframework.boot spring-cloud-starter 

Ďalej musíme povoliť vstavaný koncový bod reštartu v našom application.properties spis:

management.endpoint.restart.enabled = true

Teraz, keď sme nastavili všetko, môžeme vložiť injekciu ReštartKoncový bod do našej služby:

@Service verejná trieda RestartService {@Autowired súkromné ​​RestartEndpoint restartEndpoint; public void restartApp () {restartEndpoint.restart (); }}

Vo vyššie uvedenom kóde používame RestartEndpoint fazuľa na reštartovanie našej aplikácie. Toto je pekný spôsob reštartu, pretože musíme zavolať iba jednu metódu, ktorá urobí všetku prácu.

Ako vidíme, pomocou RestartEndpoint je jednoduchý spôsob, ako reštartovať našu aplikáciu. Na druhej strane je tu nevýhoda tohto prístupu, pretože si vyžaduje pridanie spomínaných knižníc. Ak ich ešte nepoužívame, môže to byť príliš veľká réžia iba pre túto funkčnosť. V takom prípade sa môžeme držať manuálneho prístupu z predchádzajúcej časti, pretože vyžaduje iba niekoľko ďalších riadkov kódu.

4. Obnovenie kontextu aplikácie

V niektorých prípadoch môžeme kontext aplikácie znovu načítať volaním jej metódy obnovenia.

Aj keď táto metóda môže znieť sľubne, iba niektoré typy kontextov aplikácií podporujú obnovenie už inicializovaného kontextu. Napríklad, FileSystemXmlApplicationContext, GroovyWebApplicationContext, a niekoľko ďalších to podporuje.

Bohužiaľ, ak to vyskúšame vo webovej aplikácii Spring Boot, zobrazí sa nasledujúca chyba:

java.lang.IllegalStateException: GenericApplicationContext nepodporuje viac pokusov o obnovenie: stačí zavolať „obnoviť“ raz

Nakoniec, aj keď existujú niektoré typy kontextu, ktoré podporujú viacnásobné obnovenie, nemali by sme sa tomu vyhýbať. Dôvod je ten, že Obnoviť metóda je navrhnutá ako interná metóda používaná rámcom na inicializáciu kontextu aplikácie.

5. Záver

V tomto článku sme preskúmali množstvo rôznych spôsobov, ako programovo reštartovať aplikáciu Spring Boot.

Ako vždy, na GitHube nájdeme zdrojový kód príkladov.


$config[zx-auto] not found$config[zx-overlay] not found