Spring Boot uden en webserver
1. Introduktion
Spring Boot er en god ramme til hurtigt at oprette nye Java-applikationer til en række brugssager. En af de mest populære anvendelser er som en webserver ved hjælp af en af de mange understøttede integrerede servletcontainere og skabelonmotorer.
Imidlertid, Spring Boot har en række anvendelser, der ikke kræver en webserver: konsolapplikationer, jobplanlægning, batch- eller stream-behandling, serverløse applikationer og mere.
I denne vejledning ser vi på flere forskellige måder at bruge Spring Boot uden en webserver.
2. Brug af afhængigheder
Den nemmeste måde at forhindre en Spring Boot-applikation i at starte en integreret webserver er at inkluderer ikke webserverstarteren i vores afhængigheder.
Dette betyder ikke at inkludere spring-boot-starter-web afhængighed i enten Maven POM eller Gradle build-filen. I stedet for vil vi bruge det mere basale spring-boot-starter afhængighed i stedet.
Huske det er muligt for Tomcat-afhængigheder at blive inkluderet i vores applikation som transitive afhængigheder. I dette tilfælde skal vi muligvis ekskludere Tomcat-biblioteket fra den afhængighed, der inkluderer det.
3. Ændring af fjederapplikationen
En anden måde at deaktivere den integrerede webserver i Spring Boot er ved hjælp af kode. Vi kan bruge enten SpringApplicationBuilder:
ny SpringApplicationBuilder (MainApplication.class) .web (WebApplicationType.NONE) .run (args);
Eller vi kan bruge henvisningen til SpringApplication:
SpringApplication-applikation = ny SpringApplication (MainApplication.class); application.setWebApplicationType (WebApplicationType.NONE); application.run (args);
I begge tilfælde, Vi har fordelen ved at holde servlet og container-API'erne tilgængelige på klassestien. Dette betyder, at vi stadig kan bruge webserverbibliotekerne uden at starte webserveren. Dette kan f.eks. Være nyttigt, hvis vi vil bruge dem til at skrive tests eller bruge deres API'er i vores egen kode.
4. Brug af applikationsegenskaber
Brug af kode til at deaktivere webserveren er en statisk mulighed - det påvirker vores applikation, uanset hvor vi implementerer den. Men hvad hvis vi vil oprette webserveren under specifikke omstændigheder?
I dette tilfælde kan vi bruge Spring applikationsegenskaber:
spring.main.web-application-type = ingen
Eller ved hjælp af den tilsvarende YAML:
fjeder: hoved: webapplikationstype: ingen
Fordelen ved denne tilgang er, at vi betinget kan aktivere webserveren. Ved hjælp af Spring-profiler eller -betingelser kan vi kontrollere webserverens adfærd i forskellige implementeringer.
For eksempel kunne vi kun have webserveren kørende under udvikling for at eksponere metrics eller andre Spring-endepunkter, mens vi holder den deaktiveret i produktionen af sikkerhedsmæssige årsager.
Bemærk, at nogle tidligere versioner af Spring Boot brugte en boolsk ejendom navngivet web-miljø for at aktivere og deaktivere webserveren. Med vedtagelsen af både traditionelle og reaktive containere i Spring Boot, ejendommen er blevet omdøbt og bruger nu en enum.
5. Konklusion
Der er mange grunde til at oprette Spring Boot-applikationer uden en webserver. I denne vejledning har vi set flere måder at gøre dette på. Hver har sine egne fordele og ulemper, så vi bør vælge den tilgang, der bedst opfylder vores behov.