Spring @Transactional Proxy Mekanizması & Rollback
Metot içindeki bir veritabanı işlemi patlarsa yapılan her şeyi sessizce geri sarmaktır.
5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)
ATM'den para çekerken parayı vermeden önce sistemin elektriklerinin kesilmesi halinde hesabından düşen paranın anında hesaba iade edilmesidir.
Teknik ve Profesyonel Tanımı
Spring AOP (Aspect Oriented Programming) ve dinamik CGLIB proxy'leri kullanarak metodun önüne BEGIN TRANSACTION, sonuna COMMIT veya catch bloğuna ROLLBACK yerleştirir. Varsayılan olarak yalnızca Unchecked (RuntimeException) hatalarda rollback yapar!
Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)
"@Transactional, veritabanı işlemlerini atomik bir birim haline getirir. Spring arka planda Dynamic Proxy oluşturarak metodu sarar. Aynı sınıf içindeki bir metodun diğerini çağırmasında (self-invocation) proxy atlandığı için @Transactional çalışmaz!"
Java (Spring Boot) Kod Örneği
@Transactional(rollbackFor = Exception.class)
public void paraTransferi(Long gonderenId, Long aliciId, BigDecimal tutar) {
hesapDüs(gonderenId, tutar);
hesapEkle(aliciId, tutar);
// Herhangi bir hata durumunda tüm işlemler geri alınır (Rollback)
}
Checked exception (örn: IOException) fırlatıldığında varsayılan olarak rollback OLMADIĞINI unutmak (rollbackFor = Exception.class belirtilmelidir).
İlgili Diğer Konular
Spring IoC Container & Bean Yaşam Döngüsü
Java nesnelerinin (Bean) doğumundan ölümüne kadar tüm hayatı...