Migreren naar Spring Boot 4
Tijdens de recentste editie van Spring I/O koos ik ervoor om de sessie "Restructuring for the Future" bij te wonen. De centrale boodschap was duidelijk: Spring Boot 4 is niet zomaar een incrementele update, maar een fundamentele herziening van hoe het framework is opgebouwd. De focus ligt op modularisatie, striktere types en een modernere architectuur.

Radical Modularization
De grootste interne verandering is het opsplitsen van spring-boot-autoconfigure. In versie 3 bevatte deze module de configuratie-logica voor bijna elke ondersteunde technologie. In Spring Boot 4 wordt dit volledig modulair.
Waarom is dit belangrijk?
- Schonere IDE's: Je krijgt geen auto-completion suggesties meer voor bibliotheken die je niet eens gebruikt.
- Consistentie: Elke technologie heeft nu zijn eigen specifieke starter en test-starter. Zelfs voor eenvoudige integraties zijn er nu (soms lege) starters toegevoegd om de developer experience consistent te houden.
Stap voor stap
Uiteraard kan je hulpmiddelen gebruiken als OpenRewrite of AI, maar indien je het proces tot manueel moet uitvoeren, adviseert Moritz Halbritter de volgende flow:
- Voeg de nieuwe spring-boot-starter-classic dependency toe. Dit is een tijdelijke dependency die de oude structuur simuleert, zodat je applicatie compileert terwijl je de configuratie aanpast.
- Gebruik de spring-boot-properties-migrator om verouderde settings in je application.properties of yaml op te sporen.
- Vervang de oude starter dependencies door de nieuwe, specifiekere varianten. Bijvoorbeeld:
- spring-boot-starter-aop wordt spring-boot-starter-aspectj.
- spring-boot-starter-web wordt spring-boot-starter-webmvc.
- Verwijder de spring-boot-classic dependency.
- En dan volgt de meest tijdrovende stap: alle imports aanpassen.
De verschuiving naar RestClient
Hoewel RestTemplate nog steeds aanwezig is, wordt het nu officieel gezien als "legacy". De aanbevolen variant is RestClient, die al in Spring 6.1 (en dus Slring Boot 3) geïntroduceerd werd.
- Tip: Gebruik spring-boot-starter-restclient.
- Let op: Gebruik je toch nog RestTemplate, weet dan dat er een gekende bug zit in de vroege 4.0 releases. Zorg dan dat je minimaal op versie 4.0.6 zit voor de fix hiervoor.
Jackson 3
De overstap naar Jackson 3 brengt significante breaking changes met zich mee voor JSON-verwerking:
- Pakketstructuur: Bijna alles is verhuisd naar de tools.jackson package. Maar eer je panikeert, zal ik je geruststellen: de annotaties (zoals @JsonProperty) blijven wel op hun oude plek.
- Vaarwel ObjectMapper: De vertrouwde ObjectMapper is vervangen door JsonMapper, XmlMapper, YAMLMapper en CsvMapper.
- Compatibiliteit: Er is een property (jackson.version) beschikbaar om Jackson 2 te blijven gebruiken, maar dit is een 'best-effort' oplossing waarbij Spring Boot intern de vertaalslag probeert te maken. Dit is geen garantie tot succes. Het advies van Moritz Halbritter is dus duidelijk: migreer direct naar versie 3.
Resiliency en Null-Safety
Spring Boot 4 zet grote stappen in robuustheid:
- Spring Retry: Dankzij de nieuwe @EnableResilientMethods en @Retryable annotaties is het implementeren van fault-tolerance eenvoudiger en explicieter geworden.
- JSpecify & Null-Safety: Er is enorm veel werk gestoken in het annoteren van de gehele codebase met @Nullable. Het uitgangspunt is nu: als het niet als @Nullable is gemarkeerd, mag je er 100% vanuit gaan dat het nooit null zal zijn.

Testing & Andere Highlights
Ten slotte nog een paar kritieke wijzigingen voor onze unit tests:
- Mocking: De bekende @MockBean en @SpyBean annotaties zijn verwijderd. Deze maken plaats voor de nieuwe Mockito-integratie die nauwer aansluit bij het Spring TestContext framework. Gebruik dus @MockitoBean en @MockitoSpyBean in de plaats.
- HTTP Service Interface: De declaratieve HTTP clients (waarbij je een interface definieert en Spring de implementatie genereert) zijn nu volledig afgewerkt en ondersteunen standaard API versioning.
Conclusie
Spring Boot 4 dwingt ons om keuzes te maken in welke dependencies we echt nodig hebben. We gaan naar een meer modulair, type-safe en performant ecosysteem. Geen enkele migratie is simpel, maar de voordelen voor onderhoudbaarheid en ontwikkelsnelheid zijn de investering meer dan waard.
Dank aan Marit voor het schrijven van dit artikel.