Spring Boot zonder een webserver

1. Inleiding

Spring Boot is een geweldig raamwerk om snel nieuwe Java-applicaties te maken voor verschillende gebruiksscenario's. Een van de meest populaire toepassingen is als webserver, met behulp van een van de vele ondersteunde embedded servlet-containers en template-engines.

Echter, Spring Boot heeft een aantal toepassingen waarvoor geen webserver nodig is: consoletoepassingen, taakplanning, batch- of streamverwerking, serverloze toepassingen en meer.

In deze tutorial zullen we verschillende manieren bekijken om Spring Boot te gebruiken zonder een webserver.

2. Afhankelijkheden gebruiken

De eenvoudigste manier om te voorkomen dat een Spring Boot-toepassing een embedded webserver start, is door de webserverstarter niet opnemen in onze afhankelijkheden.

Dit betekent dat de spring-boot-starter-web afhankelijkheid in het Maven POM- of Gradle-buildbestand. In plaats daarvan zouden we de meer basale spring-boot-starter afhankelijkheid op zijn plaats.

Onthoud het is mogelijk dat Tomcat-afhankelijkheden in onze applicatie worden opgenomen als transitieve afhankelijkheden. In dit geval moeten we de Tomcat-bibliotheek mogelijk uitsluiten van welke afhankelijkheid deze ook omvat.

3. Wijziging van de veerapplicatie

Een andere manier om de ingebouwde webserver in Spring Boot uit te schakelen, is door code te gebruiken. We kunnen ofwel de SpringApplicationBuilder:

nieuwe SpringApplicationBuilder (MainApplication.class) .web (WebApplicationType.NONE) .run (args);

Of we kunnen de verwijzing naar de SpringApplication:

SpringApplication-applicatie = nieuwe SpringApplication (MainApplication.class); application.setWebApplicationType (WebApplicationType.NONE); application.run (args);

In elk geval, we hebben het voordeel dat de servlet- en container-API's beschikbaar blijven op het klassenpad. Dit betekent dat we nog steeds de webserverbibliotheken kunnen gebruiken zonder de webserver te starten. Dit kan bijvoorbeeld handig zijn als we ze willen gebruiken om tests te schrijven of hun API's in onze eigen code willen gebruiken.

4. Toepassingseigenschappen gebruiken

Het gebruik van code om de webserver uit te schakelen is een statische optie - het heeft invloed op onze applicatie, ongeacht waar we deze implementeren. Maar wat als we de webserver in specifieke omstandigheden willen creëren?

In dit geval kunnen we de eigenschappen van de veerapplicatie gebruiken:

spring.main.web-application-type = geen

Of gebruik de gelijkwaardige YAML:

spring: main: webtoepassingstype: geen

Het voordeel van deze aanpak is dat we de webserver voorwaardelijk kunnen inschakelen. Met behulp van Spring-profielen of conditionals kunnen we het gedrag van de webserver in verschillende implementaties controleren.

We kunnen bijvoorbeeld de webserver alleen in ontwikkeling laten draaien om metrische gegevens of andere Spring-eindpunten bloot te leggen, terwijl deze om veiligheidsredenen tijdens de productie uitgeschakeld blijft.

Merk op dat sommige eerdere versies van Spring Boot gebruikten een boolean eigenschap genoemd web-omgeving om de webserver in en uit te schakelen. Met de acceptatie van zowel traditionele als reactieve containers in Spring Boot, de eigenschap is hernoemd en gebruikt nu een enum.

5. Conclusie

Er zijn veel redenen om Spring Boot-applicaties te maken zonder een webserver. In deze zelfstudie hebben we meerdere manieren gezien om dit te doen. Elk heeft zijn eigen voor- en nadelen, dus we moeten de aanpak kiezen die het beste aan onze behoeften voldoet.