A tradução do artigo foi preparada especificamente para os alunos do curso "Developer on the Spring Framework" .
Em 16 de outubro de 2019, o Spring Boot 2.2 foi lançado! 
Neste post, você aprenderá sobre as muitas novidades que a versão 2.2 oferece. 
Maven
Para começar com o Spring Boot 2.2. No seu aplicativo, atualize para a nova versão do 
starter-parent .
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>your-very-cool-project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>your-very-cool-project</name> <description>Spring Boot 2.2 Project</description> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project> 
Se você estiver iniciando o aplicativo do zero, crie um projeto Maven ou Grade em 
start.spring.io !

Inicialização global do bean lento
A inicialização lenta dos componentes do bean há muito tempo é suportada no Spring Framework.
O bean inicializado preguiçosamente informa ao contêiner de IoC para instanciar o bean na primeira solicitação e não na inicialização.
O novo recurso introduzido no Spring Boot 2.2 é o suporte à 
inicialização lenta global 
dos componentes do bean (esse recurso está desativado por padrão).
O que acontece quando você ativa a inicialização global do bean lento?
- A inicialização de todos os beans Spring e suas dependências será adiada até que sejam necessários.
Para reduzir o tempo de inicialização do aplicativo, agora você pode habilitar a inicialização lenta global do Spring beans nas propriedades de configuração usando:
 spring.main.lazy.initialization=true 
ou para configuração yml:
 spring: main: lazy-initialization: true 
Existem desvantagens no uso da inicialização lenta do bean? Claro! É muito importante entender as consequências - você não deve incluir a inicialização global dos componentes do bean sem pensar nesta solução! Existem algumas vantagens a considerar:
- O processamento de solicitações HTTP pode levar mais tempo enquanto ocorre uma inicialização lenta. Solicitações subsequentes não são afetadas.
- As falhas que geralmente ocorrem na inicialização (desde que os beans Spring e suas dependências são criadas ao criar o contexto do aplicativo) agora não ocorrerão imediatamente. Assim, seu aplicativo não produzirá mais falhas óbvias na inicialização! Como resultado: seu cliente pode ser o primeiro a encontrar um problema (fiação do bean).
Se você não deseja ativar a inicialização lenta do bean ( 
spring.main.lazy.initialization = false ) globalmente, considere configurar a inicialização lenta para um componente específico usando a anotação 
@Lazy .
Por outro lado, também é possível ativar a inicialização lenta dos componentes do bean ( 
spring.main.lazy.initialization = true ) no nível global e desabilitar explicitamente a inicialização lenta para um componente específico.
Resuma:


JMX está desativado por padrão
A partir do Spring Boot 2.2, o JMX é desativado por padrão. Isso ajuda a reduzir o tempo de inicialização do aplicativo e a não desperdiçar uma quantidade significativa de recursos em tempo de execução. Se você ainda depende do JMX, é possível ativá-lo novamente:
 spring.jmx.enabled=true 
ou:
 spring: jmx: enabled: true 
Melhorias nas propriedades de configuração
O Spring Boot 2.2 vem com algumas boas melhorias nas propriedades de configuração.
- Suporte à verificação de @ConfigurationPropertiesde@ConfigurationPropertiespara@ConfigurationProperties
- Ligação @ConfigurationProperties
Suporte à verificação de @ConfigurationProperties de @ConfigurationProperties para @ConfigurationProperties
O Spring Boot criará um bean para cada classe de configuração anotada com 
@ConfigurationProperties encontrada ao varrer o 
caminho de classe . Esta é uma alternativa ao uso
- @EnableConfigurationProperties para uma classe que liga uma classe de propriedade
- ou usando a anotação @Componentna classe de configuração para torná-lo um bean.
Lembre-se de que dois componentes de bean podem ser criados para a classe de configuração, anotada com 
@Component e 
@ConfigurationProperties . Nesses casos, o 
@Component deve ser removido da sua classe de configuração!
Ligação @ConfigurationProperties
O uso da ligação de propriedades baseadas em construtor agora suporta classes de propriedades de configuração imutáveis. As 
@ConfigurationProperties baseadas em construtores podem ser ativadas anotando a classe 
@ConfigurationProperties ou um de seus construtores com 
@ConstructorBinding .
Por exemplo:
 package com.example.immutable.configuration.binding; import lombok.Getter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConstructorBinding; @Getter @ConfigurationProperties("stock.quote.subscription") public class ImmutableStockQuoteSubscriptionProperties { private final String endpoint; private final String apiKey; private final SubscriptionType subscriptionType; private final boolean enabled; @ConstructorBinding public ImmutableStockQuoteSubscriptionProperties(String endpoint, String apiKey, SubscriptionType subscriptionType, boolean enabled) { this.endpoint = endpoint; this.apiKey = apiKey; this.subscriptionType = subscriptionType; this.enabled = enabled; } enum SubscriptionType {  REALTIME,  DELAYED, } } 
propriedades no meu application.yml:
 stock: quote: subscription: endpoint: http: 
Veja a 
documentação para mais detalhes.
Alterações nos pontos finais do atuador
O terminal 
/actuator/health alterou o formato JSON resultante renomeando 
details para 
components para 
components de primeiro nível.
O tipo de mídia do atuador foi alterado de: 
application/vnd.spring-boot.actuator.v2+json para 
application/vnd.spring-boot.actuator.v3+json .
Exemplo de resposta 
/actuator/health terminal antes do Spring Boot 2.2 (Atuador V2):
 { "status": "UP", "details": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32597131264, "threshold": 10485760 } }, "ping": { "status": "UP" } } } 
Resposta do terminal 
/actuator/health Spring Boot 2.2 (Atuador V3):
 { "status": "UP", "components": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32605003776, "threshold": 10485760 } }, "ping": { "status": "UP" } } } 
Seu kit de ferramentas pode depender do formato do atuador de integridade V2.
A integridade do Spring Boot 2.2 é compatível com versões anteriores com a especificação do cabeçalho 
Accept HTTP: com o tipo de mídia V2, 
application/vnd.spring-boot.actuator.v2+jsonVocê pode fazer isso sozinho usando curl:
curl -H "Accept: application/vnd.spring-boot.actuator.v2+json" http://localhost:8080/actuator/healthJuntamente com essa mudança, agora também é possível organizar 
indicadores de desempenho em grupos .
Suporte para RSocket
RSocket é um protocolo de comunicação binário usado para transportar fluxos de bytes. Possibilita modelos de interação simétrica por meio de mensagens assíncronas em um único canal.
Juntamente com o novo iniciador do RSocket, uma extensa configuração automática foi adicionada.
 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-rsocket</artifactId> </dependency> 
Para obter mais informações, leia a 
documentação do 
RSocket Spring Boot .
Suporte a Java 13
O Java 13 foi lançado em 17 de setembro de 2019.
O Spring Framework 5.2 e o Spring Boot 2.2 agora suportam Java 13.
As versões 8 e 11 do Java LTS permanecerão compatíveis com o Spring Boot 2.2.
Descoberta da plataforma em nuvem Kubernetes
ConditionalOnCloudPlatform agora determina se o aplicativo Spring Boot está sendo executado no Kubernetes.
 package nl.jtim.spring.boot; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.cloud.CloudPlatform; import org.springframework.stereotype.Service; @Service @ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) public class MyVeryCoolService { } 
Banners
O Spring Boot vem com um banner padrão que aparece no console imediatamente após o início do aplicativo.

Esse é um recurso bastante nerd, mas o Spring Boot já suporta banners personalizados (animados).
A partir do Spring Boot 2.2, você pode tornar seu banner ainda melhor:
- Os arquivos de faixa ASCII agora podem usar caracteres de controle de cores ANSI 256 usando {AnsiColor.NNN} (onde NNN é o código de cores ).
- Agora, para banners gráficos (animados), você pode definir a propriedade spring.banner.image.bitdepthcomo8. E a propriedadespring.banner.image.pixelmodeemblockpara usar caracteres ASCII do bloco.
O resultado é algo como isto:

Fonte: 
https://github.com/spring-projects/spring-boot/wiki/images/animated-ascii-art-256.gifPara um exemplo simples de um banner animado do Spring Boot 2.2 aprimorado, veja 
meu exemplo do Github .
Migrando do Java EE para o Jakarta EE
Onde possível, o comando Spring (Boot) alternou das dependências do Java EE com um identificador de grupo de 
javax . Dependências equivalentes ao Jakarta EE com o ID do grupo 
jakarta nos iniciantes do Spring Boot.
Além disso, o gerenciamento de dependência para a API de dependência do Jakarta EE foi adicionado junto com o gerenciamento de dependência existente para a API de dependência do Java EE.
Lembre-se de que o gerenciamento de dependências da API do Java EE será removido em versões futuras do Spring Boot, e é recomendável que você comece a usar as dependências da API do Jakarta EE.
Alterações na chave de configuração
O Spring Boot 2.2 apresenta muitas novas chaves de configuração. Existem também chaves desatualizadas e excluídas. Existem muitas mudanças para cobrir todas elas, mas aqui estão algumas importantes:
logging.file foi renomeado para 
logging.file.namelogging.path foi renomeado para 
logging.file.pathPara uma visão geral completa de todas as alterações, consulte 
o log de alterações na configuração do Spring Boot 2.2!Desatualizado
Confira as notas de versão para obter uma lista completa de 
classes e propriedades obsoletas .
Algumas mudanças que devem ser observadas:
- Suporte a tempo de Joda descontinuado em favor de java.time
- O cliente de transporte Elasticsearch e o cliente Jest foram preteridos em favor de outras opções, como RestHighLevelClient e ReactiveElasticsearchClient, consulte a documentação para obter mais detalhes.
Atualizações de dependência
O Spring Boot 2.2 vem com muitas dependências atualizadas.
Atualizações de dependência de primavera:As atualizações mais importantes para outras dependências:Atualização de dependência de teste:Atualizando para o Spring Boot 2.2
Desde 1º de agosto de 2019, o Spring Boot 1.x 
concluiu seu ciclo de vida . Se você ainda estiver usando os aplicativos Spring Boot 1.x, é hora de atualizar!
Lembre-se de que as classes, métodos e propriedades que foram descontinuados no Spring Boot 2.1 foram removidos no Spring Boot 2.2. Certifique-se de não chamar métodos obsoletos antes de atualizar. Confira 
as notas de versão para uso obsoleto no Spring Boot 2.1.
Você pode encontrar mais informações nos seguintes links:
Clique em + se você achou este artigo útil!
Alguma pergunta ou feedback?
Pesquisar no Twitter: 
@TimvanBaarsen