Állítsa le a tavaszi rendszerindító alkalmazást

1. Áttekintés

A tavaszi indító alkalmazás életciklusának kezelése nagyon fontos a gyártásra kész rendszer számára. A tavaszi konténer az összes bab létrehozását, inicializálását és megsemmisítését kezeli a ApplicationContext.

Ennek az írásnak a hangsúlya az életciklus megsemmisítési fázisa. Pontosabban megvizsgáljuk a Spring Boot alkalmazás leállításának különböző módjait.

Ha többet szeretne megtudni arról, hogy miként állíthat be egy projektet a Spring Boot használatával, olvassa el a Spring Boot Starter cikket, vagy olvassa el a Spring Boot konfigurációt.

2. Leállítás végpont

Alapértelmezés szerint az összes végpont engedélyezve van a Spring Boot alkalmazásban, kivéve /Leállitás; ez természetesen része a Működtető végpontok.

Itt van a Maven-függőség ezek beállításához:

 org.springframework.boot spring-boot-starter-actuator 

És ha biztonsági támogatást is szeretnénk beállítani, akkor a következőkre van szükségünk:

 org.springframework.boot spring-boot-starter-security 

Végül engedélyezzük a leállítási végpontot a alkalmazás.tulajdonságok fájl:

management.endpoints.web.exposure.include = * management.endpoint.shutdown.enabled = true endpoints.shutdown.enabled = true

Ne feledje, hogy ki kell tennünk minden olyan működtető végpontot is, amelyet használni akarunk. A fenti példában kitettük az összes működtető végpontot, amely magában foglalja a /Leállitás végpont.

A Spring Boot alkalmazás leállításához egyszerűen meghívunk egy ilyen POST metódust:

curl -X POST localhost: port / működtető / leállítás

Ebben a felhívásban a kikötő a működtető portot jelenti.

3. Zárja be az alkalmazás kontextusát

Hívhatjuk a Bezárás() módszer közvetlenül az alkalmazás kontextusának felhasználásával.

Kezdjük egy példával a kontextus létrehozására és bezárására:

ConfigurableApplicationContext ctx = új SpringApplicationBuilder (Application.class) .web (WebApplicationType.NONE) .run (); System.out.println ("A tavaszi rendszerindító alkalmazás elindult"); ctx.getBean (TerminateBean.class); ctx.close ();

Ez elpusztítja az összes babot, elengedi a zárakat, majd bezárja a babgyárat. Az alkalmazás leállításának ellenőrzéséhez a Spring normál életciklus-visszahívását használjuk @PreDestroy kommentár:

a TerminateBean nyilvános osztály {@PreDestroy public void onDestroy () dobja a {System.out.println kivételt ("A tavaszi konténer megsemmisült!"); }}

Hozzá kell adnunk egy ilyen típusú babot is:

@Configuration public class ShutdownConfig {@Bean public TerminateBean getTerminateBean () {return new TerminateBean (); }}

Itt van a kimenet a példa futtatása után:

A Spring Boot alkalmazás elindult Bezárás [e-mail védett] DefaultLifecycleProcessor - Babok leállítása a 0 fázisban A JMX-nek kitett babok regisztrációjának leállításakor a Spring Container megsemmisült!

Fontos szem előtt tartani: az alkalmazáskörnyezet bezárása közben a külön életciklusok miatt a szülői környezetet nem érinti.

3.1. Zárja be az aktuális alkalmazáskörnyezetet

A fenti példában létrehoztunk egy gyermekalkalmazás-kontextust, majd a Bezárás() módszer annak megsemmisítésére.

Ha le akarjuk zárni a jelenlegi kontextust, az egyik megoldás az, hogy egyszerűen felhívjuk a működtetőt /Leállitás végpont.

Hozhatunk azonban létre saját egyéni végpontot is:

@RestController public class ShutdownController végrehajtja az ApplicationContextAware {private ApplicationContext context; @PostMapping ("/ shutdownContext") public void shutdownContext () {((ConfigurableApplicationContext) context) .close (); } @Orride public void setApplicationContext (ApplicationContext ctx) dobja a BeansException {this.context = ctx; }}

Itt felvettünk egy vezérlőt, amely a ApplicationContextAware interfészt és felülírja a szetter metódust az aktuális alkalmazáskörnyezet megszerzéséhez. Ezután leképezési módszerben egyszerűen hívjuk a Bezárás() módszer.

Ezután felhívhatjuk új végpontunkat, hogy lezárjuk a jelenlegi kontextust:

curl -X POST localhost: port / shutdownContext

Természetesen, ha egy valós végződésű alkalmazáshoz hozzáad egy ilyen végpontot, akkor azt is biztosítani kell.

4. Kilépés SpringApplication

SpringApplication regisztrálja a Leállitás horog a JVM-mel, hogy megbizonyosodjon arról, hogy az alkalmazás megfelelően kilép.

A bab megvalósíthatja a ExitCodeGenerator felület egy adott hibakód visszaadásához:

ConfigurableApplicationContext ctx = új SpringApplicationBuilder (Application.class) .web (WebApplicationType.NONE) .run (); int exitCode = SpringApplication.exit (ctx, new ExitCodeGenerator () {@Orride public int getExitCode () {// return the error code return 0;}}); System.exit (exitCode);

Ugyanaz a kód a Java 8 lambdas alkalmazásával:

SpringApplication.exit (ctx, () -> 0);

Miután felhívta a System.exit (exitCode), a program 0 visszatérési kóddal fejeződik be:

A folyamat 0 kilépési kóddal fejeződött be

5. Öld meg az alkalmazás folyamatát

Végül egy Spring Boot alkalmazást az alkalmazáson kívülről is leállíthatunk egy bash szkript használatával. Ennek az opciónak az első lépése az, hogy az alkalmazás kontextusába PID-t írunk egy fájlba:

SpringApplicationBuilder app = új SpringApplicationBuilder (Application.class) .web (WebApplicationType.NONE); app.build (). addListeners (új ApplicationPidFileWriter ("./ bin / shutdown.pid")); app.run ();

Ezután hozzon létre egy a leállítás. denevér fájl a következő tartalommal:

kill $ (cat ./bin/shutdown.pid)

Végrehajtása leállítás. denevér kivonja a folyamat azonosítóját a leállítás.pid fájlt, és a megöl parancs a Boot alkalmazás leállításához.

6. Következtetés

Ebben a gyors írásban néhány olyan egyszerű módszert ismertettünk, amelyekkel le lehet állítani egy futó Spring Boot alkalmazást.

Bár a fejlesztő feladata, hogy megfelelő módszert válasszon; mindezeket a módszereket a tervezésnek és a célnak megfelelően kell alkalmazni.

Például, .kijárat() akkor előnyös, ha hibakódot kell átadnunk egy másik környezetnek, mondja a JVM a további műveletekhez. HasználataAlkalmazásPID nagyobb rugalmasságot biztosít, mivel elindíthatjuk vagy újraindíthatjuk az alkalmazást is bash szkript használatával.

Végül, /Leállitásazért van itt, hogy lehetővé tegye külsőleg fejezze be az alkalmazásokat HTTP-n keresztül. Az összes többi esetre .Bezárás() tökéletesen fog működni.

Szokás szerint a cikk teljes kódja elérhető a GitHub projekten.


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