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.
No vídeo a seguir eu demonstro uma migração simples, de um projeto básico trabalhado em um dos meus cursos. Fique a vontade para assistir:
Caso queira ler sobre as alterações a serem realizadas, prossiga com os exemplos explicados na próxima seção do artigo.
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/”:
@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.