Configurar um aplicativo Web de inicialização Spring

Configurar um aplicativo Web de inicialização Spring

1. Visão geral

Spring Boot pode fazer muitas coisas; neste tutorial, veremos algumas das opções de configuração mais interessantes no Boot.

Leitura adicional:

Migrando do Spring para o Spring Boot

Veja como migrar corretamente de uma inicialização Spring para Spring.

Read more

Criando um Starter personalizado com Spring Boot

Um guia rápido e prático para criar iniciantes personalizados do Spring Boot.

Read more

Testando no Spring Boot

Aprenda como o Spring Boot suporta testes, para escrever testes de unidade com eficiência.

Read more

2. O número da porta

Nos principais aplicativos autônomos, o padrão da porta HTTP principal é 8080; we can easily configure Boot to use a different port:

server.port=8083

E para a configuração baseada em YAML:

server:
    port: 8083

Também podemos personalizar programaticamente a porta do servidor:

@Component
public class CustomizationBean implements
  WebServerFactoryCustomizer {

    @Override
    public void customize(ConfigurableServletWebServerFactory container) {
        container.setPort(8083);
    }
}

3. O Caminho do Contexto

Por padrão, o caminho do contexto é "/". Se isso não for o ideal e você precisar alterá-lo - para algo como /app_name, aqui está a maneira rápida e simples de fazer isso por meio de propriedades:

server.servlet.contextPath=/springbootapp

E para configuração baseada em YAML:

server:
    servlet:
        contextPath:/springbootapp

Finalmente - a alteração também pode ser feita de forma programática:

@Component
public class CustomizationBean
  implements WebServerFactoryCustomizer {

    @Override
    public void customize(ConfigurableServletWebServerFactorycontainer) {
        container.setContextPath("/springbootapp");
    }
}

4. A página de erro com etiqueta em branco

Spring Boot registra automaticamente um bean`BasicErrorController se você não especificar nenhuma implementação customizada na configuração. `++

No entanto, esse controlador padrão pode, é claro, ser configurado:

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. Personalize as mensagens de erro

O boot fornece mapeamentos/error por padrão para lidar com os erros de uma maneira sensata.

Se você deseja configurar páginas de erro mais específicas, há um bom suporte para um Java DSL uniforme para personalizar o tratamento de erros:

@Component
public class CustomizationBean
  implements WebServerFactoryCustomizer {

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

Aqui, tratamos especificamenteBad Request para corresponder ao caminho/400 e todos os outros para corresponder ao caminho comum.

E uma implementação de/errorHaven muito simples:

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

Resultado:

You have reached the haven of errors!!!

6. Desligue um aplicativo de inicialização programaticamente

Você pode desligar programaticamente um aplicativo de inicialização com a ajuda deSpringApplication.. Isso tem um métodoexit() estático que leva dois argumentos: oApplicationContexte umExitCodeGenerator:

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

É por meio desse método utilitário que podemos desligar o aplicativo.

7. Configure os níveis de registro

Você pode facilmentetune the logging levels in a Boot application; A partir da versão 1.2.0 em diante, você pode configurar o nível de log no arquivo de propriedades principal:

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

E, assim como com um aplicativo Spring padrão - você pode ativar diferentes sistemas de registro comoLogback,log4j,log4j2, etc, adicionando seu XML personalizado ou arquivo de propriedades no classpath e definindo as bibliotecas no pom.

8. Registrar um novo servlet

Se você estiver implantando o aplicativo com a ajuda do servidor incorporado, poderá registrar novos Servlets em um aplicativo de inicializaçãoby exposing them as beans da configuração convencional:

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

Alternativamente, você pode usar umServletRegistrationBean:

@Bean
public SpringHelloServletRegistrationBean servletRegistrationBean() {

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

9. Configurar Jetty ou Undertow no aplicativo de inicialização

Os iniciadores Spring Boot geralmente usamTomcat as the default embedded server. Se isso precisar ser alterado - você pode excluir a dependência do Tomcat e incluir Jetty ou Undertow:

Configurando 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;
}

Configurando Undertow


    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. Conclusão

Neste artigo rápido, examinamos alguns dos maisinteresting and useful Spring Boot configuration options.

É claro que existem muitas, muito mais opções para configurar e ajustar um aplicativo de inicialização às suas necessidades nos documentos de referência - essas são apenas algumas das mais úteis que encontrei.