Spring Boot 3

No dia 24/11/2022 foi lançada a nova versão do Spring Boot, a versão 3. Ainda estou começando a explorar essa nova versão, mas alguns pontos importantes foram alterados em relação ao Spring Boot 2, os quais vou citar logo mais.

Caso queira explorar o guia de migração do Spring Boot 3 você poderá acessar a página referente no Github – Spring Boot 3.0 Migration Guide – e ficar por dentro de tudo que foi alterado em relação a versão anterior.

Do Spring Boot 2 para o Spring Boot 3

Veja agora alguma mudanças em relação as verões do Spring Boot:

1. Enquanto o Spring Boot 2 foi “construído” com base no Spring Framework 5, o Spring Boot 3 está baseado no Spring Framework 6.

2. O Spring Boot 3 requer o Java 17 ou posterior . O Java 8 não é mais suportado.

3. Spring Boot 3 faz uso da Plataforma Jakarta EE versão 10, diferente das versões anteriores que usavam a Java EE. O Spring Boot 3.0 suporta as especificações Servlet 6.0, Java Bean Validation 3.0 e JPA 3.1.

Com a migração para a Plataforma Jakarta EE, os pacotes base passam a ser jakarta em vez de javax. Não esqueça disso quando migrar do Spring Boot 2 para o Spring Boot 3.

Por exemplo:

// Java EE - Spring Boot 1 e 2
import javax.persistence.Entity
import javax.validation.constraints.NotBlank

// Jakarta EE - Spring Boot 3
import jakarta.persistence.Entity
import jakarta.validation.constraints.NotBlank

4. O suporte para banners de aplicativos baseados em imagem foi removido.

banner.gif, banner.jpge, banner.png – agora são ignorados e devem ser substituídos por um arquivo banner.txt.

5. Alterações de correspondência de URL do Spring MVC e WebFlux

A partir do Spring Framework 6.0, a opção de configuração correspondente à barra final foi preterida e seu valor padrão definido como false. Isso significa que, anteriormente, o controlador a seguir corresponderia a “GET /some/greeting” e “GET /some/greeting/”:


A partir desta mudança do Spring Framework , GET /some/greeting/ não corresponde mais por padrão e resultará em um erro HTTP 404.

@RestController
public class MyController {
   @GetMapping("/some/greeting")
   public String greeting {
     return "Hello";
   }
}

A partir desta mudança do Spring Framework 6, GET /some/greeting/ não corresponde mais e por padrão resultará em um erro HTTP 404. Para contornar o erro 404, será necessário declarar as duas URLs na anotação:

@RestController
public class MyController {
   @GetMapping({"/some/greeting", "/some/greeting/"})
   public String greeting {
     return "Hello";
   }
}

6. O spring-boot-starter-data-jpa passa a trabalhar com o Hibernate 6.1. Portanto, consulte a documentação do Hibernate 6 para ver se será necessário realizar alguma alteração em seu projeto ao migrar para o Spring Boot 3.

Conforme o guia de migração do Spring Boot 3, a propriedade spring.jpa.hibernate.use-new-id-generator-mappings foi removida, pois o Hibernate 6 descontinuou o suporte suporte.

7. Algumas propriedades usadas nos arquivos application.properties / application.yml foram ou removidas ou renomeadas e precisarão ser atualizadas na versão 3 do Spring Boot.

Para ajudá-lo com isso, o Spring Boot fornece o módulo spring-boot-properties-migrator. Uma vez adicionado como dependência ao seu projeto, ele não apenas analisará o ambiente do seu aplicativo e imprimirá o diagnósticos na inicialização, mas também migrará temporariamente as propriedades em tempo de execução para você. Dessa forma, você poderá buscar no log do console as propriedades que foram migradas e mais tarde atualiza-las no arquivo de propriedades.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-properties-migrator</artifactId>
	<scope>runtime</scope>
</dependency>

8. A versão do Template de páginas Thymeleaf foi alterada da 3.0 para a 3.1. Por conta disso, você verá no log da sua aplicação alguns avisos sobre descontinuidade de alguns recursos. Por exemplo:

...
WARN 3428 --- [nio-9090-exec-2] actStandardFragmentInsertionTagProcessor : 
[THYMELEAF][http-nio-9090-exec-2][layout] Deprecated unwrapped fragment expression 
"promo-list-modal" found in template promo-add, line 79, col 10. 
Please use the complete syntax of fragment expressions instead ("~{promo-list-modal}"). 
The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
...

O aviso indica que as propriedades th:insert e th:replace devem ter suas declarações substituídas para o novo formata da expressão de declaração do nome do fragmento e de seu local.

// Thymeleaf 3.0 - Spring Boot 2
<div th:replace="fragmento :: public"></div>

// Thymeleaf 3.1 - Spring Boot 3
<div th:replace="~{fragmento :: public}"></div>

Conclusão

Essas foram algumas mudanças que observei e achei importantes para compartilhar. Como citado anteriormente, todas as mudanças estão contidas no Guia de Migração do Spring Boot 3.0. Você pode conferi-las lá. Na seção de referencias deixarei alguns links importantes para que você possa se integrar dessas alterações.

No vídeo a seguir eu demonstro um migração simples, de um projeto básico trabalhado em um dos meus cursos. Fique a vontade para assistir:

Referencias

Ballem

Marcio Ballem é bacharel em Sistemas de Informação pelo Centro Universitário Franciscano em Santa Maria/RS. Tem experiência com desenvolvimento Delphi e Java em projetos para gestão pública e acadêmica. Possui certificação em Java, OCJP 6.

Você pode gostar...