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
@ConfigurationProperties
de @ConfigurationProperties
para @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
@Component
na 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+json
Você pode fazer isso sozinho usando curl:
curl -H "Accept: application/vnd.spring-boot.actuator.v2+json" http://localhost:8080/actuator/health
Juntamente 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.bitdepth
como 8
. E a propriedade spring.banner.image.pixelmode
em block
para 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.name
logging.path
foi renomeado para
logging.file.path
Para 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