birisi bu açıklamanın ne yaptığını ve tam olarak ne zaman kullandığımızı açıklayabilirse:
@Transactional(propagation=Propagation.REQUIRED)
Teşekkürler
birisi bu açıklamanın ne yaptığını ve tam olarak ne zaman kullandığımızı açıklayabilirse:
@Transactional(propagation=Propagation.REQUIRED)
Teşekkürler
Yanıtlar:
Yayılma ayarı PROPAGATION_REQUIRED olduğunda, ayarın uygulandığı her yöntem için mantıksal bir işlem kapsamı oluşturulur. Bu tür mantıksal işlem kapsamlarının her biri, yalnızca geri alma durumunu ayrı ayrı belirleyebilir ve bir dış işlem kapsamı, iç işlem kapsamından mantıksal olarak bağımsızdır. Elbette, standart PROPAGATION_REQUIRED davranışı durumunda, tüm bu kapsamlar aynı fiziksel işlemle eşleştirilecektir. Bu nedenle, iç işlem kapsamındaki yalnızca geri alma işaretçisi, dış işlemin gerçekten tamamlama şansını etkiler (beklediğiniz gibi).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
Spring Docs'da sağlananların ötesinde kullanımla ilgili meslekten olmayan bir açıklamaya ihtiyacınız varsa
Bu kodu düşünün ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
DoSomething () çağrıldığında, yürütülmeden önce veritabanında bir İşlem başlatması gerektiğini bilir. Bu yöntemi arayan kişi zaten bir İşlem başlattıysa, bu yöntem aynı fiziksel İşlemi mevcut veritabanı bağlantısında kullanacaktır .
Bu @Transactional
açıklama, kodunuz çalıştırıldığında bir İşlem olması gerektiğini söylemenin bir yolunu sağlar . Biri olmadan çalışmayacağından, kodunuzda veritabanınızda eksik verilerle kalmayacağınız veya bir istisna olursa bir şeyi temizlemeniz gerekmeyeceği varsayımını yapabilirsiniz.
İşlem yönetimi oldukça karmaşık bir konudur, bu yüzden umarım bu basitleştirilmiş cevap yardımcı olur
@Transactional
Hizmet katmanınıza eklediyseniz , @Transactional
bu işlem içinde çağrılan DAO yöntemlerini de eklemenize gerek yoktur .
doSomething()
herhangi @Transactional olmadan çağıran bir başka iç içe yöntem bu aynı işlem de o çağıran yöntemleri için kullanılacak olacak?
Spring uygulamalarında, <tx:annotation-driven/>
herhangi bir sınıf / yöntemi kullanarak açıklama tabanlı işlem desteğini etkinleştirirseniz ve herhangi bir sınıf / yöntemi @Transactional (propagation = Propagation.REQUIRED) ile açıklarsanız, Spring çerçevesi bir işlem başlatır ve yöntemi çalıştırır ve işlemi gerçekleştirir. Herhangi bir RuntimeException meydana gelirse, işlem geri alınacaktır.
Aslında propagation = Propagation.REQUIRED, varsayılan yayılma seviyesidir, açıkça belirtmenize gerek yoktur.
Daha fazla bilgi için: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
İşlem yönetimi için benimsenen çeşitli işlem ayarlarını ve davranışları REQUIRED
, ISOLATION
vb. Anlamak için işlem yönetiminin temellerini anlamanız gerekir.
Açıklama hakkında daha fazla bilgi için İşlem yönetimi bölümünü okuyun .