Programsko ponovno pokretanje Spring Boot Application

1. Pregled

U ovom uputstvu pokazat ćemo kako programski ponovno pokrenite aplikaciju Spring Boot.

Ponovno pokretanje naše aplikacije može biti vrlo korisno u nekim slučajevima:

  • Ponovno učitavanje konfiguracijskih datoteka nakon promjene nekog parametra
  • Promjena trenutno aktivnog profila tijekom izvođenja
  • Ponovna inicijalizacija konteksta aplikacije iz bilo kojeg razloga

Iako ovaj članak pokriva funkcionalnost ponovnog pokretanja aplikacije Spring Boot, imajte na umu da imamo i odličan vodič o gašenju aplikacija Spring Boot.

Sada, istražimo različite načine na koje možemo implementirati ponovno pokretanje aplikacije Spring Boot.

2. Ponovno pokrenite stvaranjem novog konteksta

Svoju aplikaciju možemo ponovno pokrenuti zatvaranjem konteksta aplikacije i stvaranjem novog konteksta od nule. Iako je ovaj pristup prilično jednostavan, postoje neki osjetljivi detalji s kojima moramo biti oprezni kako bismo uspjeli.

Pogledajmo kako to implementirati u glavni metoda naše aplikacije Spring Boot:

@SpringBootApplication javna klasa Application {private static ConfigurableApplicationContext context; javna statička void glavna (String [] args) {context = SpringApplication.run (Application.class, args); } javno statično void ponovno pokretanje () {ApplicationArguments args = context.getBean (ApplicationArguments.class); Nit niti = nova nit (() -> {context.close (); context = SpringApplication.run (Application.class, args.getSourceArgs ());}); thread.setDaemon (lažno); nit.start (); }}

Kao što možemo vidjeti u gornjem primjeru, važno je ponovno stvoriti kontekst u zasebnoj ne-demonskoj niti - na ovaj način sprječavamo zaustavljanje JVM-a, pokrenuto Zatvoriti metodu, od zatvaranja naše prijave. U suprotnom bi se naša aplikacija zaustavila jer JVM ne čeka da se završe niti demona prije nego što ih završi.

Dodatno, dodajmo REST krajnju točku putem koje možemo pokrenuti ponovno pokretanje:

@RestController javna klasa RestartController {@PostMapping ("/ restart") ponovno void ponovno pokretanje () {Application.restart (); }}

Ovdje smo dodali kontroler s metodom mapiranja koji poziva naš ponovno pokretanje metoda.

Tada možemo nazvati našu novu krajnju točku da bismo ponovno pokrenuli aplikaciju:

curl -X POST localhost: priključak / ponovno pokretanje

Ako dodamo ovakvu krajnju točku u stvarnu aplikaciju, morat ćemo je i osigurati.

3. Krajnja točka ponovnog pokretanja aktuatora

Drugi način za ponovno pokretanje naše aplikacije je upotreba ugrađenog RestartEndpoint iz Proljetni pokretač čizme.

Prvo, dodajmo tražene Mavenove ovisnosti:

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

Dalje, moramo omogućiti ugrađenu krajnju točku za ponovno pokretanje u našoj primjena.svojstva datoteka:

upravljanje.endpoint.restart.enabled = true

Sad kad smo sve postavili, možemo ubrizgati Ponovo pokreniteKrajnja točka u našu uslugu:

@Service javna klasa RestartService {@Autowired private RestartEndpoint restartEndpoint; javna void restartApp () {restartEndpoint.restart (); }}

U gornjem kodu koristimo RestartEndpoint bean za ponovno pokretanje naše aplikacije. Ovo je lijep način ponovnog pokretanja jer moramo pozvati samo jednu metodu koja obavlja sav posao.

Kao što vidimo, pomoću RestartEndpoint je jednostavan način za ponovno pokretanje naše aplikacije. S druge strane, ovaj je pristup nedostatak jer zahtijeva da dodamo spomenute knjižnice. Ako ih već ne koristimo, ovo bi moglo biti previše za samo ovu funkciju. U tom se slučaju možemo držati ručnog pristupa iz prethodnog odjeljka, jer zahtijeva još samo nekoliko redaka koda.

4. Osvježavanje konteksta aplikacije

U nekim slučajevima možemo ponovno učitati kontekst aplikacije pozivajući njegovu metodu osvježavanja.

Iako ova metoda može zvučati obećavajuće, samo neke vrste konteksta aplikacije podržavaju osvježavanje već inicijaliziranog konteksta. Na primjer, FileSystemXmlApplicationContext, GroovyWebApplicationContext, i nekoliko drugih ga podržava.

Nažalost, ako ovo isprobamo u web aplikaciji Spring Boot, dobit ćemo sljedeću pogrešku:

java.lang.IllegalStateException: GenericApplicationContext ne podržava višestruke pokušaje osvježavanja: samo jednom nazovite 'refresh'

Napokon, iako postoje neke vrste konteksta koje podržavaju višestruko osvježavanje, trebali bismo to izbjegavati. Razlog je taj što osvježiti metoda dizajnirana je kao interna metoda koju koristi okvir za inicijalizaciju konteksta aplikacije.

5. Zaključak

U ovom smo članku istražili nekoliko različitih načina kako programski ponovno pokrenuti aplikaciju Spring Boot.

Kao i uvijek, izvorni kod za primjere možemo pronaći na GitHubu.


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