Spring Boot 4.1: 3.x'ten geçerken bilmeniz gerekenler
Uzun süredir yaşayan Java servislerinde en çok ertelenen iş, çerçeve sürümünü yükseltmektir. Her şey çalışıyorsa dokunmak istemezsiniz; ama açık kaynak desteği bittiğinde güvenlik yamaları da gelmez. Spring Boot 3.5 tam da bu noktaya geldi, ben de kendi 3.x uygulamalarım için notlarımı toparladım.
Aşağıdaki sürüm ve tarih bilgileri Eylül 2026 itibarıyla, resmi sürüm notlarına ve destek takvimine göre verilmiştir. Kaynaklarda çıkış günleri birkaç gün farklı görünebiliyor; bu yüzden ay düzeyinde okumak daha sağlıklı.
Sürüm durumu kısaca
- 4.1 güncel seri; son yama 4.1.1 (Ağustos 2026). Açık kaynak desteği Temmuz 2027'ye kadar.
- 4.0 (Kasım 2025) hâlâ destekli; açık kaynak desteği 2026 sonunda bitiyor.
- 3.5, 3.x serisinin son sürümü. Açık kaynak desteği Haziran 2026'da sona erdi; ticari destek çok daha uzun sürüyor.
- 4.2 için kilometre taşı sürümleri çıkıyor; kararlı sürüm Kasım 2026 için planlanmış. Kilometre taşları üretim için değil, uyumluluk denemesi için.
Spring yılda iki küçük sürüm çıkarıyor ve her biri yaklaşık on üç ay açık kaynak desteği alıyor. Bu ritmi bilmek, "ne zaman yükselteceğim" sorusunu takvime bağlamayı kolaylaştırıyor.
4.x'in temeli: 4.0 neyi değiştirdi?
4.1'i anlamak için önce 4.0'a bakmak gerekiyor, çünkü asıl kırılma orada:
- Platform: Spring Framework 7, Spring Security 7, Jakarta EE 11 hizası (Servlet 6.1). En az Java 17; 21 ya da 25 öneriliyor.
- Jackson 3 varsayılan oldu. Jackson 2 yalnız "deprecated" olarak duruyor. Özel serileştirici yazan projelerde paket adı ve API değişikliği işi var. Geçişin en çok emek isteyen kalemi büyük olasılıkla bu.
- API sürümleme Spring MVC ve WebFlux için otomatik yapılandırıldı; başlık, sorgu parametresi ya da yol ile sürüm seçilebiliyor.
- HTTP Service Clients:
@HttpExchangeile işaretlenen düz arayüzler için Spring uygulamayı kendisi üretiyor. Feign benzeri bildirimsel REST istemcisi çekirdeğe gelmiş oldu. - OpenTelemetry starter ile metrik ve izler OTLP üzerinden dışa aktarılıyor.
- Modüler otomatik yapılandırma: otomatik yapılandırma teknolojiye göre küçük modüllere bölündü; uygulama yalnız kullandığını yüklüyor.
- Null güvenliği için çerçeve genelinde JSpecify açıklamaları kullanılıyor.
Spring ekibinin önerisi net: önce 3.5'e geçin, deprecation uyarılarını temizleyin, sonra 4.0 geçiş rehberini izleyin. 3.x'ten 4.x'e tek adımda atlamak, Jackson 3 ve Jakarta EE 11 değişiklikleri yüzünden en riskli yol.
4.1'in yenilikleri
4.1 (Haziran 2026) daha çok "genişleme" sürümü. Öne çıkanlar:
- gRPC desteği: sunucu ve istemciler için yerleşik otomatik yapılandırma. Servisler arası yüksek performanslı iletişim için ek kütüphane gerekmiyor.
- HTTP istemcisinde SSRF koruması:
InetAddressFilterile giden isteklerde iç ağ ve bulut meta veri adresleri gibi hedefler engellenebiliyor. Kullanıcının verdiği URL'ye istek atan her servis için önemli bir katman. - Jackson ayarları okuma ve yazma özellikleri düzeyinde property ile açılıp kapatılabiliyor.
- Gözlemlenebilirlik:
@Asyncmetotlarda iz aktarımı, Kafka ve RabbitMQ için otomatik gözlem, OpenTelemetry için daha ince ayarlar. Info uç noktası artık çalışma süresi, saat dilimi gibi süreç bilgisi de veriyor. - Veri tarafı: tembel JDBC bağlantısı (
spring.datasource.connection-fetch=lazy), MongoDB ile Spring Batch otomatik yapılandırması, Redis için@RedisListener. - Log4j dosya döndürme için dört strateji (boyut, zaman, ikisi birden, cron).
- Yapılandırma içe aktarmada karakter kodlaması belirtilebiliyor; Türkçe karakterli property dosyaları için küçük ama değerli bir ayrıntı.
- Kotlin 2.3 ve Java 26'ya kadar resmî destek.
4.1'de kırılan ve kaldırılanlar
Geçiş planında asıl dikkat isteyen liste bu; her madde bir "kırılma → çözüm" çifti:
- 4.0'da deprecated olan sınıf ve metotlar kaldırıldı → önce 4.0'da uyarıları temizleyin.
- Apache Derby desteği kaldırıldı → test ve demolarda H2 ya da HSQLDB'ye geçin.
layertoolsjar modu kaldırıldı → Docker katman betiklerinde-Djarmode=toolskullanın.- Maven
-DskipTestsartık AOT işlemesini atlamıyor → derleme süresi uzarsa-Dmaven.test.skip=true. - JPA ertelenmiş başlatma bir
AsyncTaskExecutoristiyor → executor bean'i tanımlayın. - jOOQ 3.20 ve üstü Java 21 istiyor → Java 17'de kalan projeler Java 21'e çıkmalı.
4.1'de yeni "deprecated" işaretlenenler de var: Derby sabitleri, Dynatrace V1 API yapılandırması ve Devtools LiveReload özelliği. Bunlar 4.2 ya da sonrasında kalkacak.
Kendi geçiş planım
Kendi uygulamalarım için çıkardığım sıra şöyle:
- 3.5'in son yamasına geç. Değişiklik küçük, testler kolay geçer.
- Deprecation uyarılarını sıfırla. 4.1 bunları hata yapacak.
- Jackson 3 ve Jakarta EE 11 etkisini ayrı dalda dene. Özel serileştiriciler ve servlet filtreleri en çok burada kırılıyor.
- 4.0 geçiş rehberiyle 4.1'e çık. Her adım testlerle doğrulanmalı; etki analizi olmadan yükseltme yapmam.
- Dışa HTTP isteği atan servislerde SSRF filtresini aç. Bu, yükseltmenin bedava getirdiği güvenlik kazancı.
- Yeni projeye başlarken doğrudan 4.1 + Java 21. Sanal thread'leri açmak (
spring.threads.virtual.enabled=true) iyi bir başlangıç ayarı.
Son söz
Sürüm yükseltmek heyecan verici bir iş değil; ama destek takvimini takip edip küçük adımlarla ilerlemek, bir gün zorunlu ve acil hâle gelen büyük atlamadan çok daha ucuz. 3.5'in açık kaynak desteğinin bitmiş olması, bu planı bu sonbahar için gündeme almak için yeterli sebep.
Kaynaklar
- spring.io — Spring Boot proje sayfası ve destek politikası
- spring.io blog — "Spring Boot 4.1.0 available now" duyurusu
- GitHub — Spring Boot 4.1 Release Notes
- GitHub — Spring Boot 4.0 Release Notes
- endoflife.date — Spring Boot destek takvimi
- InfoQ — "Spring Boot 4.1 Adds gRPC Auto-Configuration, SSRF Mitigation, and Kotlin 2.3 Support" haberi