O que há de novo na bota de mola 2.2?

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 { /** * Real time stock quotes */ REALTIME, /** * Stock quotes that are delayed by 15 minutes */ DELAYED, } } 


propriedades no meu application.yml:

 stock: quote: subscription: endpoint: http://stockgeeks.io/api enabled: true apiKey: secret subscriptionType: realtime 


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.gif

Para 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

Source: https://habr.com/ru/post/pt475384/


All Articles