← Kursa Dön
📄 Text · 10 min

Java & Spring Versiyon Uyumluluğu

Giriş

Spring projelerinde en sık karşılaşılan sorunlardan biri versiyon uyumsuzluğudur. Hangi Java versiyonu hangi Spring Boot versiyonuyla çalışır? Jakarta EE ile javax arasındaki fark nedir? Bu derste tüm bu soruları net şekilde cevaplayacağız.

Java Versiyonları ve Özellikleri

Java 8 (2014) — Bir Devir

  • Lambda expressions ve Stream API

  • Optional sınıfı

  • Interface default methods

  • Date/Time API (java.time)

  • Uzun süre en çok kullanılan Java versiyonu oldu

Java 11 (2018) — İlk Modern LTS

  • Local variable type inference: var list = new ArrayList<String>();

  • HTTP Client API (java.net.http)

  • String yeni metotları: isBlank(), lines(), strip()

  • Java EE ve CORBA modülleri kaldırıldı

Java 17 (2021) — Günümüzün Standardı

  • Sealed classes ve interfaces

  • Pattern matching for instanceof

  • Records (data class): record Point(int x, int y) {}

  • Text blocks: """ çok satırlı string """

  • Spring Boot 3.x için minimum gereksinim

Java 21 (2023) — Gelecek

  • Virtual threads (Project Loom): Hafif, yüksek ölçekli iş parçacıkları

  • Pattern matching for switch

  • Record patterns

  • Sequenced collections

// Java 17 Records + Spring Boot 3.x
public record UserDto(
    Long id,
    String name,
    String email
) {}

// Java 21 Virtual Threads + Spring Boot 3.2+
spring.threads.virtual.enabled=true

Spring Framework & Spring Boot Versiyon Eşleşmesi

Spring BootSpring FrameworkMin JavaJakarta/javax
2.7.x5.3.xJava 8javax.*
3.0.x6.0.xJava 17jakarta.*
3.1.x6.0.xJava 17jakarta.*
3.2.x6.1.xJava 17jakarta.*
3.3.x6.1.xJava 17jakarta.*
3.4.x6.2.xJava 17jakarta.*

Kritik: Spring Boot 2.x → 3.x geçişi büyük bir sıçramadır. javax.*jakarta.* namespace değişikliği tüm import'ları etkiler.

Jakarta EE vs javax

Java EE, Oracle'dan Eclipse Foundation'a devredildiğinde Jakarta EE adını aldı. En önemli değişiklik namespace değişikliğidir:

// Spring Boot 2.x (javax)
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotNull;

// Spring Boot 3.x (jakarta)
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.constraints.NotNull;

Bu değişiklik mekanik ama kapsamlıdır — tüm dosyalarda find-and-replace yapmanız gerekir. IDE'lerin migration tool'ları bu işi kolaylaştırır.

GraalVM Native Image Desteği

Spring Boot 3.x ile birlikte GraalVM Native Image desteği resmi olarak geldi:

# Native image derleme (Spring Boot 3.x)
./mvnw -Pnative native:compile

# Sonuç: ~50MB binary, ~50ms başlatma süresi
# (Normal JVM: ~200MB, ~2-3s başlatma)

Avantajları: Anında başlatma, düşük bellek kullanımı, container-friendly. Dezavantajları: Uzun derleme süresi, reflection kısıtlamaları, runtime sınıfı yükleme yok.

Ne zaman kullanılır: Serverless (AWS Lambda), CLI araçları, yüksek ölçekli mikroservisler.

Versiyon Seçim Rehberi

DurumÖnerilen
Yeni proje başlıyorumSpring Boot 3.3+ / Java 21
Mevcut projem Java 8Önce Java 17'ye, sonra Boot 3.x'e geç
Performance kritikJava 21 (virtual threads) + Boot 3.2+
Serverless/Startup hızıGraalVM native image + Boot 3.x

Best Practices

İpucu: Yeni projelerde daima en güncel LTS Java versiyonunu (Java 21) ve en güncel Spring Boot versiyonunu kullanın.

Uyarı: Spring Boot 2.x artık resmi olarak desteklenmiyor (end of life). Güvenlik güncellemeleri almak için 3.x'e geçiş planlayın.

Özet

Java ve Spring versiyonlarını doğru eşleştirmek, projenizin stabilitesi ve güvenliği için kritik önem taşır. Spring Boot 3.x ile Jakarta EE'ye geçiş yapılmıştır ve Java 17 minimum gereksinimdir. GraalVM native image desteği ise modern bulut uygulamaları için heyecan verici imkânlar sunar.