De um tradutor: apesar do fato de um ano já ter passado, as perguntas sobre o que há de novo nos deu o 2nd Boot não param por aí. Escrever esse conteúdo do zero não é a idéia mais inteligente. Por isso, decidimos traduzir o artigo, que nos parece o mais conciso e, ao mesmo tempo, bastante completo.
O lançamento do Spring Boot 2 ocorreu no início de 2018 e todos estão ansiosos para vê-lo em breve. Este lançamento foi o culminar de 17 meses de trabalho e mais de 6.800 confirmações de 215 pessoas diferentes. Há muitos recursos interessantes que vale a pena discutir, então vamos falar sobre o que há de novo no Spring Boot 2.
Neste artigo, consideraremos:
- A história do Spring Boot
- Novidades do Spring Boot
- Guia de atualização do Spring Boot 2
História do Spring Boot
Antes de me aprofundar nas inovações, gostaria de aproveitar esta oportunidade e contar um pouco sobre a história do Spring Boot. Em uma postagem publicada em agosto de 2013, Phil Webb anunciou o primeiro lançamento de um projeto chamado Spring Boot em seu blog.
O Spring Boot foi criado para simplificar a criação de aplicativos e serviços prontos para uso no Spring, sem esforço desnecessário. O Spring Boot é uma visão subjetiva da plataforma Spring, que permite que usuários iniciantes e experientes do Spring encontrem tudo o que precisam. Usando o Boot, você pode criar aplicativos independentes que são executados como 'java-jar' ou distribuídos em um formato WAR mais tradicional.
Após cerca de 9 meses, em abril de 2014, o Spring Boot 1.0 foi lançado. Desde então, houve muitos lançamentos menores e novos recursos úteis.
Spring Boot 1.1 (junho de 2014)
- teste de inicialização de inicialização de mola
- Métricas e pontos finais de integridade
- Auto-configuração do Elastic Search, Apache Solr, Spring Social e Spring Integration
- Suporte a modelos (Freemaker, Groovy e Velocity)
Spring Boot 1.2 (março de 2015)
- Servlet 3.1, Tomcat 8 e Jetty 9
- Primavera 4.1
- Anotação @SpringBootApplication
- Suporte por e-mail
Spring Boot 1.3 (dezembro de 2016)
- Atualizando o Spring Framework para a versão 4.2
- Atualizando o Spring Security para a versão 4.0
- Ferramentas do desenvolvedor
- Armazenando em cache a configuração automática
- JARs totalmente executáveis e suporte de serviço
Spring Boot 1.4 (janeiro de 2017)
- Primavera 4.3
- Hibernate 5
- Testando aprimoramentos
- Iniciador de integração
- Suporte para Couchbase e Neo4J
Spring Boot 1.5 (fevereiro de 2017)
- Terminal de registradores
- Suporte para Apache Kafka
- Mecanismos avançados para Cloud Foundry
- Suporte LDAP
- Atualizações de teste
Novidades da Primavera
Então, o que há de novo no Spring Boot 2? Se falamos da maior inovação, essa é uma atualização do Spring Framework para a 5ª versão. Desde que o Spring Framework 5 foi lançado em setembro de 2017, a maioria dos desenvolvedores (como eu) aguardava o lançamento do Spring Boot 2. O Spring Framework 5 tem uma lista considerável de novos recursos, mas eu gostaria de falar apenas sobre alguns dos mais importantes.
O que há de novo no Spring Framework 5
Suporte à versão Java 8+
Se você continuar criando aplicativos no Spring Framework, precisará trabalhar com o Java versão 8+. Você provavelmente pensou que esta é uma mudança muito importante para todos nós, mas para a equipe da Primavera é ainda mais importante. Isso permitiu atualizar a base de código-fonte para o Java 8 com todos os seus novos recursos, como expressões ou fluxos lambda. Isso não apenas torna o código mais legível, mas também melhora o desempenho do núcleo da plataforma.
Suporte para Java 9
Se você deseja usar o Java 9, precisa atualizar para o Spring Framework 5 e também para o Spring Boot 2. Sei que muitos ainda não usam as versões mais recentes do Java em produção, e esta é uma ótima oportunidade para experimentar novos e legais "brinquedos". Tudo deve funcionar sem problemas ao usar o caminho de classe padrão, mas li sobre algumas dificuldades ao mudar para os módulos Java 9.
Spring mvc
Embora o Spring MVC não esteja no centro da história neste artigo, vale a pena dizer que houve várias atualizações agradáveis. Não vou me debruçar sobre eles; para detalhes, consulte a documentação do Spring Framework 5 .
Spring webflux
Os fluxos de dados assíncronos são fundamentais para a história do Spring Framework 5. Esse é um tipo de pensamento completamente diferente, mas, felizmente para nós, não há necessidade de reaprender a escrever aplicativos de uma maneira completamente nova. O Spring WebFlux é uma estrutura absolutamente assíncrona e sem bloqueio, construída do zero, que permite lidar com um grande número de conexões paralelas. Embora seja uma revolução no paradigma, não será tão difícil começar.

Suporte Kotlin
O suporte ao Kotlin foi adicionado novamente em http://start.spring.io , mas o Spring Framework 5 possui suporte especializado para esse idioma que traz recursos úteis, você pode ler sobre eles aqui .
Testando aprimoramentos
A maior mudança no sistema de teste é o suporte total ao JUnit 5 Jupiter. Falarei mais sobre isso mais tarde, mas quando você inicia um novo aplicativo no Spring Boot 2, ainda usa o JUnit 4 por padrão; no entanto, mudar para o JUnit 5 é uma tarefa trivial.
O que há de novo no Spring Boot 2
Atualizações da biblioteca de terceiros
A cada nova versão do Spring Boot, a equipe do Spring tem a oportunidade de atualizar várias dependências.
- Timeleaf 3 *
- Jetty 9.4
- Tomcat 8.5
- Hibernate 5.2
- Via 5
- Gradle 4
* O iniciador do Thymeleaf agora possui um thymeleaf-extras-java8time embutido.
Dados de segurança e primavera reativos
Com a mudança para o Spring WebFlux, o Spring Data adicionou suporte para aplicativos com fluxos de dados assíncronos. Cassandra, MongoDB, Couchbase e Redis atualmente têm suporte a API assíncrona. O Spring Boot possui entradas para POM para todos eles, facilitando o início.
Há também uma oportunidade de usar o Spring Security 5.0 em nossos aplicativos reativos.
Atuador
O Spring Boot Actuator não é novidade, mas foi reescrito do zero. Se você ainda não está familiarizado com o Atuador, eis o que ele faz: ele exibe automaticamente pontos de extremidade para obter informações sobre o status do aplicativo. O atuador no Spring Boot 1.x foi escrito sobre os servlets e, com as novas abordagens reativas, a equipe do Spring precisava de uma solução que suporta as abordagens antiga e reativa. Além disso, as seguintes alterações foram feitas no Atuador:
- Redesenha para suportar servlets e reatividade
- Status e verificação de saúde detalhada tornam-se separados
- Modelo de segurança simplificado
- Mudando para Micrômetro (é como SLF4J, apenas para métricas)
- Estrutura de dados JSON aprimorada
- Um processo simplificado para criar pontos de extremidade personalizados.
- Ponto final
- @WebEndpoint
- @JmxEndpoint
É provável que haja dificuldades na atualização devido a alterações no modelo de segurança, sobre as quais falaremos mais adiante. Por padrão, todos os pontos de extremidade da Web são acessíveis através do caminho /actuator
com uma URL no formato /actuator/{id}
. O caminho / actuator
pode ser alterado nas configurações de management.endpoints.web.base-path
.
Há um bloco de documentação separado e detalhado para os pontos de extremidade da API da Web do Spring Boot Actuator. Vale a pena iniciar a introdução a essa ferramenta.
Gradle Plugin
Eu sempre gostei muito de Gradle, e estou muito feliz que a equipe tenha decidido reescrever o plugin para Gradle.
O plug-in Spring Boot Gradle permite implementar o suporte ao Spring Boot no Gradle e permite empacotar arquivos jar ou war executáveis, executar aplicativos no Spring Boot e gerenciar dependências por meio das dependências do spring boot. O plug-in Gradle no Spring Boot requer o Gradle versão 4.0 e posterior.
Introdução
Para começar a trabalhar com o plug-in, você precisa enviá-lo para o projeto.
buildscript { repositories { maven { url 'https://repo.spring.io/libs-milestone' } } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.RC1' } } apply plugin: 'org.springframework.boot'
Criando jar executável e arquivos de guerra
A tarefa bootRepackage foi substituída por bootJar e bootWar para criar arquivos jar e war, respectivamente. Ambas as tarefas têm mais funcionalidade do que o comando similar Gradle padrão, fornecendo acesso a todas as configurações e lógica.
Gerenciamento de Dependências
O plug-in Spring Boot Gradle não puxa mais o plug-in de gerenciamento de dependência automaticamente. Em vez disso, o plug-in Gradle Spring Boot vê que o plug-in de gerenciamento de dependências está conectado e importa a versão correta da BOM. Isso permite que você controle melhor onde e como o gerenciamento de dependências está configurado. Para a maioria dos aplicativos, adicionar um plug-in de gerenciamento de dependência é suficiente:
apply plugin: 'io.spring.dependency-management'
O plugin Gradle possui sua própria documentação , que contém informações muito úteis. Eu recomendo que quem quiser começar a trabalhar com a Gradle siga este link.
Segurança simplificada
Um dos principais objetivos do Spring Boot 2.x era simplificar a configuração de segurança e facilitar a adição de configurações de segurança personalizadas. Por padrão, todos os dados são protegidos, incluindo recursos estáticos e pontos de extremidade do atuador. Se o Spring Security estiver no caminho de classe, o Spring Boot adicionará a anotação @EnableWebSecurity
e qual mecanismo de autenticação específico será usado determinará o mecanismo de negociação de conteúdo do Spring Security.
Quando um usuário define suas regras de segurança, a configuração padrão de segurança do Spring Boot para de funcionar. Nesse ponto, o usuário precisará definir todas as regras de segurança com a maior precisão possível. Isso significa que todas as configurações de segurança são coletadas em um único local e não há problemas com a ordem de processamento de comandos com os WebSecurityConfigurerAdapters
existentes.
Exemplo de configurações de segurança individuais:
http .authorizeRequests() // 1 .requestMatchers(EndpointRequest.to("status", "info")) .permitAll() // 2 .requestMatchers(EndpointRequest.toAnyEndpoint()) .hasRole("ACTUATOR") // 3 .requestMatchers(StaticResourceRequest.toCommonLocations()) .permitAll() // 4 .antMatchers("/**") .hasRole("USER") .and() ... // additional configuration
/status
e /info
não requerem autorização.- Todos os outros atuadores são protegidos usando a função
ACTUATOR
. - A localização dos recursos estáticos compartilhados está disponível para todos.
- Todos os outros pontos de extremidade do aplicativo são protegidos pela função
USER
.
Segurança do atuador
Considerando que os pontos de extremidade do atuador são fixos, você deve ativar ou excluir os pontos de extremidade, dependendo de quais você precisa. Aqui estão as configurações que controlam isso, elas foram alteradas desde o lançamento 1.x.
# ENDPOINTS WEB CONFIGURATION (WebEndpointProperties) management.endpoints.web.exposure.include=info,health # Endpoint IDs that should be included or '*' for all. management.endpoints.web.exposure.exclude= # Endpoint IDs that should be excluded. management.endpoints.web.base-path=/actuator # Base path for Web endpoints. Relative to server.servlet.context path or management.server.servlet.context-path if management.server.port is configured. management.endpoints.web.path-mapping= # Mapping between endpoint IDs and the path that should expose them.
Se você não tiver certeza de como definir essas configurações, adicione a documentação para as configurações gerais do aplicativo .
Suporte HTTP / 2
Incrivelmente, o lançamento da especificação HTTP 1.1 já estava em 1996. Suponho que você não precise lembrar que uma rede moderna difere em todos os aspectos. Se você deseja implementar o suporte HTTP / 2 em um aplicativo no Spring MVC ou WebFlux, use o seguinte parâmetro.
server.http2.enabled=true
O suporte a HTTP / 2 depende do servidor da web e do ambiente de aplicativos selecionados, pois esse protocolo não é suportado no JDK8 imediatamente. Leia mais sobre isso na documentação .
Opções de configuração
No Spring Boot 1.x, a chamada ligação relaxada era suportada; em outras palavras, era possível determinar o nome do parâmetro de várias maneiras (caso do camelo, sublinhado, hífen) e, no final, o valor foi atribuído à mesma propriedade.
A ligação relaxada funciona da mesma maneira e a maneira como você lê variáveis no seu código mudou:

24. Configuração externalizada
O Spring Boot permite que você externalize sua configuração para poder trabalhar com o mesmo código de aplicativo em diferentes ... docs.spring.io
Métrica
A métrica personalizada do Spring Boot foi substituída pelo micrômetro. É desenvolvido pela equipe Pivotal e se adapta rapidamente aos projetos Pivotal.
O Spring Boot Actuator fornece configuração automática para o micrômetro , uma interface métrica de aplicativo que suporta muitos tipos de monitoramento, incluindo:

Mais informações sobre o micrômetro em https://micrometer.io/ .
Uma atualização por causa disso pode ser dolorosa para quem registra toneladas de métricas personalizadas.
Programador de quartzo
O Spring Boot 2 tem suporte para a biblioteca de execução de tarefas agendadas do Quartz, que é fácil de adicionar usando o iniciador do spring-boot-starter-quartz. Trabalho suportado na RAM e no JDBC.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
Pool de Conexão HikariCP
O conjunto de conexões padrão mudou de Tomcat para HikariCP. Se você usou spring.datasource.type para fazer o Hikari funcionar no seu aplicativo Tomcat, você pode removê-lo. Da mesma forma, se você quiser continuar usando o pool do Tomcat, basta adicionar o seguinte à sua configuração:
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
Ferramentas do desenvolvedor
Por padrão, sempre que o aplicativo é reiniciado, um relatório sobre a diferença nas configurações é registrado. Em outras palavras, o relatório mostra alterações na configuração automática do aplicativo que ocorrem quando você faz alterações, como excluir / adicionar beans e definir parâmetros de configuração.
Para desativar a gravação deste relatório, configure o seguinte parâmetro:
spring.devtools.restart.log-condition-evaluation-delta=false
Suporte Kotlin
No início deste artigo, o suporte oficial da Kotlin foi mencionado. Há também um bloco especializado de documentação para o Kotlin .
5 de junho
Como mencionado acima, o JUnit 4 ainda é usado por padrão nos aplicativos Spring Boot. Se você deseja atualizar para o JUnit 5, é necessário excluir o JUnit 4 do spring-boot-starter-test e adicionar as dependências necessárias. Você também precisará de plugins da lista abaixo.
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>${junit-platform.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
Guia de atualização do Spring Boot 2
Eu acho que você não pode falar sobre um fato tão óbvio que, com um lançamento tão grande, apenas alterar o número da versão em produção não é a melhor maneira de atualizar. Antes de tudo, eu recomendaria a leitura do Guia de Migração do Spring Boot 2.0 . Pessoalmente, encontrei uma solução para a maioria dos meus problemas em um modelo de segurança simplificado e alterações de parâmetros. Este guia tem ótimas dicas sobre a migração de arquivos de parâmetros.
No Spring Boot 2.0, muitos parâmetros de configuração foram renomeados / excluídos e os desenvolvedores precisam atualizar application.properties
/ application.yml
para refletir essas alterações. Para facilitar essa tarefa, o Spring Boot entregou um novo módulo spring-boot-properties-migrator
. Sendo adicionado ao seu projeto como uma dependência, ele não apenas analisará o ambiente do aplicativo e exibirá os resultados do diagnóstico na inicialização, mas também migrará temporariamente os parâmetros no tempo de execução. Esta é uma etapa necessária ao migrar um aplicativo:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> </dependency>
Não sei o que você pensa sobre isso, mas definitivamente vou começar a mexer com o Spring Boot 2 e trabalhar na migração do código para esta versão, mas geralmente em qualquer versão principal, espero a próxima versão menor. Isso se aplica não apenas ao Spring, mas também a outras marcas, da Apple à Pivotal e até ao Angry Birds!