Spring Boot Transaction, Isolation, Propagation ve RollBack
Spring Boot projelerinde Transactional işlemlerde bize yardımcı olan yöntemler mevcut.
@Transactional
Projemizde @Transactional anotasyonu ekleyerek ilgili metot ya da sınıfa belirtmemiz yeterli olmakla birlikte transaction işlemini başlatma ya da bitirme gibi ek bir belirtime gerek kalmaz.
Transactional anotasyonunu ekledikten sonra aşağıdaki propertyler ile birlikte iş akışına göre farklı davranışlar veririz. Şimdi bu propertyleri açıklayacağım.
Propagation
Transaction başlatıldıktan sonraki davranışları ele aldığımız propertydir. Bu tanımlamaya göre sonraki transaction davranışı belirlenir.
– REQUIRED
Default tanımlamadır. Transaction yoksa açılır eğer varsa diğer transaction bundan devam etmesini sağlamakta.
– REQUIRES_NEW
Aktif bir transaction işlemi varsa diğer işlem ayrı bir transaction olarak açılır ve var olan transaction bittikten sonra bekleyen transaction başlamakta. Her transaction birbirinden farklı bir instance olarak işlem devam eder.
– NESTED
JDBC işlemlerimizde hata durumlarında rollback yapabilmek için geliştirilmiş bir transaction özellik. JDBC işlemlerimizde bu özelliği kullanarak rahat bir şekilde transactional işlemi yapabiliriz.
– SUPPORTS
Yeni bir transaction açılmayıp. Aktif bir transaction varsa katılması sağlanır.
– NOT_SUPPORTED
Aktif transaction varsa bekletilmekte. Transaction açamayız. Transactionsuz çalışır.
– NEVER
Transaction durumlarında exception fırlatıp. İşlem sonlanmaktadır
– MANDATORY
Transaction yoksa exception oluşturulmakta.
readOnly
Sadece okuma yapacak şekilde bir transaction açılmaktadır.
timeout
Tanımlanan süre içersinde transaction gerçekleşmezse rollback işlemi başlatılmaktadır.
rollbackFor
Check exception durumlarında yani bizim kontrolümüzde oluşan hatalarda rollback edilirken belirlemiş olduğumuz class Throwable sınıfından türetilmelidir.
Unchecked exception durumlarında rollback işlemi yapılır.
isolation
Spring Boot projemizde birden fazla transaction varsa her bir transactiondaki veriyi manipule etmek için kullanılmaktadır. Veritabanı işlemleri sonucu oluşan davranışlara göre karar verme durumunda kullanırız ve isolationun seviyeleri bulunmaktadır.
– READ_UNCOMMITTED
uncomitted durumundaki veriyi bir başka transaction okunmasına izin sağlamakta.
– READ_COMMITTED
Transactionun commit olduğu veri okunabilmektedir.
– REPEATABLE_READ
İki farklı ve aynı anda çalışan transactionun farklı veri okunmasına izin verilmez.
– SERIALIZABLE
Aynı anda çalışan 2 farklı transaction sadece select sorgusuna izin verilir.
No Comment! Be the first one.