Configurare un'applicazione Web Spring Boot

1. Panoramica

Spring Boot può fare molte cose; in questo tutorial, esamineremo alcune delle opzioni di configurazione più interessanti in Boot.

2. Il numero di porta

Nelle principali applicazioni autonome, il valore predefinito della porta HTTP principale è 8080; possiamo facilmente configurare Boot per utilizzare una porta diversa :

server.port=8083

E per la configurazione basata su YAML:

server: port: 8083

Possiamo anche personalizzare a livello di codice la porta del server:

@Component public class CustomizationBean implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableServletWebServerFactory container) { container.setPort(8083); } }

3. Il percorso del contesto

Per impostazione predefinita, il percorso del contesto è "/". Se non è l'ideale e devi cambiarlo, in qualcosa come / app_name , ecco il modo semplice e veloce per farlo tramite le proprietà:

server.servlet.contextPath=/springbootapp

E per la configurazione basata su YAML:

server: servlet: contextPath:/springbootapp

Infine, la modifica può essere eseguita anche a livello di programmazione:

@Component public class CustomizationBean implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableServletWebServerFactorycontainer) { container.setContextPath("/springbootapp"); } }

4. La pagina di errore etichetta bianca

Spring Boot registra automaticamente un BasicErrorControllerbean se non si specifica alcuna implementazione personalizzata nella configurazione.

Tuttavia, questo controller predefinito può, ovviamente, essere configurato:

public class MyCustomErrorController implements ErrorController { private static final String PATH = "/error"; @GetMapping(value=PATH) public String error() { return "Error haven"; } @Override public String getErrorPath() { return PATH; } }

5. Personalizza i messaggi di errore

Boot fornisce le mappature / errori per impostazione predefinita per gestire gli errori in modo ragionevole.

Se desideri configurare pagine di errore più specifiche, c'è un buon supporto per un Java DSL uniforme per personalizzare la gestione degli errori:

@Component public class CustomizationBean implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableServletWebServerFactorycontainer) { container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400")); container.addErrorPages(new ErrorPage("/errorHaven")); } }

Qui, abbiamo gestito in modo specifico la richiesta non valida per abbinare il percorso / 400 e tutti gli altri per abbinare il percorso comune.

E un'implementazione / errorHaven molto semplice :

@GetMapping("/errorHaven") String errorHeaven() { return "You have reached the haven of errors!!!"; }

Produzione:

You have reached the haven of errors!!!

6. Chiudere un'applicazione di avvio al livello di programmazione

Puoi chiudere a livello di programmazione un'app di avvio con l'aiuto di SpringApplication. Questo ha un metodo exit () statico che accetta due argomenti: ApplicationContext e ExitCodeGenerator :

@Autowired public void shutDown(ExecutorServiceExitCodeGenerator exitCodeGenerator) { SpringApplication.exit(applicationContext, exitCodeGenerator); }

È attraverso questo metodo di utilità che possiamo chiudere l'app.

7. Configurare i livelli di registrazione

È possibile regolare facilmente i livelli di registrazione in un'applicazione di avvio ; A partire dalla versione 1.2.0 in poi, è possibile configurare il livello di log nel file delle proprietà principali:

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

E proprio come con un'app Spring standard, puoi attivare diversi sistemi di registrazione come Logback , log4j , log4j2 , ecc. Aggiungendo il loro XML personalizzato o il file delle proprietà nel classpath e definendo le librerie nel pom.

8. Registrare un nuovo servlet

Se stai distribuendo l'applicazione con l'aiuto del server incorporato, puoi registrare nuovi servlet in un'applicazione di avvio esponendoli come bean dalla configurazione convenzionale:

@Bean public HelloWorldServlet helloWorld() { return new HelloWorldServlet(); }

In alternativa, puoi utilizzare un ServletRegistrationBean :

@Bean public SpringHelloServletRegistrationBean servletRegistrationBean() { SpringHelloServletRegistrationBean bean = new SpringHelloServletRegistrationBean( new SpringHelloWorldServlet(), "/springHelloWorld/*"); bean.setLoadOnStartup(1); bean.addInitParameter("message", "SpringHelloWorldServlet special message"); return bean; }

9. Configurare Jetty o Undertow nell'applicazione di avvio

Gli avviatori Spring Boot generalmente utilizzano Tomcat come server incorporato predefinito . Se è necessario modificarlo, puoi escludere la dipendenza Tomcat e includere invece Jetty o Undertow:

Configurazione di Jetty

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-jetty 
@Bean public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() { JettyEmbeddedServletContainerFactory jettyContainer = new JettyEmbeddedServletContainerFactory(); jettyContainer.setPort(9000); jettyContainer.setContextPath("/springbootapp"); return jettyContainer; }

Configurazione della risacca

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-undertow 
@Bean public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() { UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory(); factory.addBuilderCustomizers(new UndertowBuilderCustomizer() { @Override public void customize(io.undertow.Undertow.Builder builder) { builder.addHttpListener(8080, "0.0.0.0"); } }); return factory; }

10. Conclusione

In questo breve articolo, abbiamo esaminato alcune delle opzioni di configurazione di Spring Boot più interessanti e utili .

Ci sono ovviamente molte, molte altre opzioni per configurare e ottimizzare un'app di avvio in base alle tue esigenze nei documenti di riferimento: queste sono solo alcune delle più utili che ho trovato.