Spring Boot senza un server Web

1. Introduzione

Spring Boot è un ottimo framework per creare rapidamente nuove applicazioni Java per una varietà di casi d'uso. Uno degli usi più popolari è come server web, utilizzando uno dei tanti contenitori servlet incorporati e motori di modelli supportati.

Tuttavia, Spring Boot ha una serie di utilizzi che non richiedono un server Web : applicazioni console, pianificazione dei lavori, elaborazione in batch o in streaming, applicazioni senza server e altro ancora.

In questo tutorial, esamineremo diversi modi per utilizzare Spring Boot senza un server web.

2. Utilizzo delle dipendenze

Il modo più semplice per impedire a un'applicazione Spring Boot di avviare un server Web incorporato è non includere lo starter del server Web nelle nostre dipendenze .

Ciò significa non includere la dipendenza spring-boot-starter-web nel file di compilazione Maven POM o Gradle. Invece, vorremmo usare al suo posto la dipendenza più elementare di avviamento a molla .

Tieni presente che è possibile includere le dipendenze Tomcat nella nostra applicazione come dipendenze transitive . In questo caso, potrebbe essere necessario escludere la libreria Tomcat da qualsiasi dipendenza la includa.

3. Modifica dell'applicazione Spring

Un altro modo per disabilitare il server web incorporato in Spring Boot è usare il codice. Possiamo usare SpringApplicationBuilder :

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

Oppure possiamo usare il riferimento alla SpringApplication :

SpringApplication application = new SpringApplication(MainApplication.class); application.setWebApplicationType(WebApplicationType.NONE); application.run(args);

In entrambi i casi, abbiamo il vantaggio di mantenere le API servlet e contenitore disponibili sul classpath . Ciò significa che possiamo ancora utilizzare le librerie del server web senza avviare il server web. Questo può essere utile, ad esempio, se vogliamo usarli per scrivere test o utilizzare le loro API nel nostro codice.

4. Utilizzo delle proprietà dell'applicazione

L'uso del codice per disabilitare il server Web è un'opzione statica: influenzerà la nostra applicazione indipendentemente da dove la distribuiamo. Ma cosa succede se vogliamo creare il server web in circostanze specifiche?

In questo caso, possiamo usare le proprietà dell'applicazione Spring:

spring.main.web-application-type=none

O usando l'equivalente YAML:

spring: main: web-application-type: none

Il vantaggio di questo approccio è che possiamo abilitare in modo condizionale il server web . Utilizzando i profili Spring o condizionali, possiamo controllare il comportamento del server Web in diverse distribuzioni.

Ad esempio, potremmo avere il server web in esecuzione in fase di sviluppo solo per esporre metriche o altri endpoint Spring mantenendolo disabilitato in produzione per motivi di sicurezza.

Si noti che alcune versioni precedenti di Spring Boot utilizzavano una proprietà booleana denominata ambiente web per abilitare e disabilitare il server web. Con l'adozione di contenitori sia tradizionali che reattivi in ​​Spring Boot, la proprietà è stata rinominata e ora utilizza un enum .

5. conclusione

Ci sono molte ragioni per creare applicazioni Spring Boot senza un server web. In questo tutorial, abbiamo visto diversi modi per farlo. Ognuno ha i suoi pro e contro, quindi dovremmo scegliere l'approccio che meglio soddisfa le nostre esigenze.