☕ javaspringboot

Java Ekibi · Teknik Notlar · Güncelleme 2026.10

JVM 21 üzerinde
günlük çalışma referansı.

Java 21 LTS'e geçiş tamamlandı. Bu sayfa ekibin ortak not defteri: yeni dil özellikleri, Spring Boot 3 geçiş kalemleri, sık kullanılan Maven/Gradle komutları ve JVM ayarları tek yerde.

JDK 21.0.8 Spring Boot 3.4 Maven 3.9 Gradle 8.11

01 Java 21'de ne var

Virtual Threads JEP 444

Platform thread'i bloklamadan yüksek eşzamanlılık. I/O ağırlıklı servislerde thread pool boyutlandırma derdi biter.

try (var ex = Executors.newVirtualThreadPerTaskExecutor()) {
    ex.submit(() -> repo.findAll());
}

Record Patterns JEP 440

Kayıtların bileşenlerine doğrudan desen eşleme ile ayrıştırma. instanceof + cast zincirleri kaybolur.

if (obj instanceof Point(int x, int y)) {
    return x + y;
}

Sealed Classes JEP 409

Hiyerarşiyi kapat, switch yoruculuğunu derleyiciye devret. Domain modellemede alt tip kaçağı olmaz.

sealed interface Shape
    permits Circle, Square {}

Pattern Matching for switch JEP 441

Tip desenleri ve guard koşulları ile ifade tabanlı dallanma.

return switch (s) {
    case Circle c when c.r() > 0 -> Math.PI * c.r() * c.r();
    case Square q -> q.side() * q.side();
};

Sequenced Collections JEP 431

getFirst() / getLast() / reversed() artık ortak arayüzde.

var last = list.getLast();
var rev  = list.reversed();

Unnamed Patterns JEP 456

Kullanılmayan bileşenler için _. Derleyici uyarısı ve gereksiz değişken gürültüsü biter.

case Point(int x, _) -> x;

02 Spring Boot 3 geçiş kalemleri

javax → jakarta

Tüm javax.persistence, javax.servlet, javax.validation import'ları jakarta.* olur. Toplu dönüşüm için IntelliJ migration refactor'ü kullan.

Security filter chain

WebSecurityConfigurerAdapter kaldırıldı. SecurityFilterChain bean'i ve lambda DSL zorunlu.

Observability

Micrometer + Actuator varsayılan. Tracing için management.tracing.enabled=true yeterli.

Native image

GraalVM 21 ile spring-boot-maven-plugin üzerinden AOT derleme destekli. Reflection kayıtlarını kontrol et.

03 Sık kullanılan komutlar

İşlemMavenGradle
Derlemvn -q compile./gradlew compileJava
Testlermvn test./gradlew test
Paketle (test atla)mvn -DskipTests package./gradlew build -x test
Bağımlılık ağacımvn dependency:tree./gradlew dependencies
Etkin profilmvn help:active-profiles./gradlew properties
Formatmvn spotless:apply./gradlew spotlessApply

04 JVM ayarları

prod · container
java -XX:MaxRAMPercentage=75 \
     -XX:+UseG1GC \
     -XX:+ExitOnOutOfMemoryError \
     -XX:NativeMemoryTracking=summary \
     -jar app.jar

05 Sık gelen hatalar

LazyInitializationException

Entity session dışında erişiliyor. Çözüm: sorguda join fetch veya @EntityGraph. open-in-view açmak çözüm değil, semptomu gizler.

NoSuchBeanDefinitionException

Bileşen taranmıyor. @SpringBootApplication sınıfının paket hiyerarşisini kontrol et; alt pakette değilse @ComponentScan gerekir.

Port 8080 already in use

lsof -i :8080 ile süreci bul, ya da server.port ile taşı. Container içinde eski instance kalmış olabilir.

OutOfMemoryError: Metaspace

Genellikle dinamik proxy / class generation. MaxMetaspaceSize ver ve sızıntıyı jcmd GC.class_stats ile izle.