घोषणात्मक लेनदेन गुंजाइश
स्प्रिंग और जेपीए @Transaction
एनोटेशन दोनों आपको दिए गए एप्लिकेशन लेनदेन के दायरे को परिभाषित करने की अनुमति देते हैं।
इसलिए, यदि किसी सेवा पद्धति को एनोटेशन के साथ एनोटेट किया जाता है @Transactional
, तो यह एक लेन-देन के संदर्भ में चलेगा। यदि सेवा पद्धति कई DAO या रिपॉजिटरी का उपयोग करती है, तो सभी रीड एड ऑपरेशन एक ही डेटाबेस लेनदेन में निष्पादित किए जाएंगे।
वसंत @Transactional
org.springframework.transaction.annotation.Transactional
एनोटेशन स्प्रिंग ढांचे के 1.2 संस्करण (2005 लगभग) के बाद से उपलब्ध किया गया है, और यह आप निम्नलिखित व्यवहार गुणों को सेट करने की अनुमति देता है:
isolation
: अंतर्निहित डेटाबेस अलगाव स्तर
noRollbackFor
और noRollbackForClassName
: जावा Exception
वर्गों की सूची जो बिना लेन-देन रोलबैक को ट्रिगर किए ट्रिगर की जा सकती है
rollbackFor
और rollbackForClassName
: जावा Exception
वर्गों की सूची जो फेंके जाने पर लेनदेन रोलबैक को ट्रिगर करती है
propagation
: Propagation
Enum द्वारा दिया गया लेन-देन प्रसार प्रकार । उदाहरण के लिए, यदि लेन-देन का संदर्भ विरासत में दिया जा सकता है (जैसे, REQUIRED
) या एक नया लेन-देन संदर्भ बनाया जाना चाहिए (जैसे, REQUIRES_NEW
) या यदि कोई अपवाद नहीं है तो अपवाद को फेंक दिया जाना चाहिए (उदाहरण के लिए MANDATORY
) या यदि अपवाद को फेंक दिया जाना चाहिए। यदि एक वर्तमान लेन-देन संदर्भ पाया जाता है (जैसे, NOT_SUPPORTED
)।
readOnly
: क्या वर्तमान लेन-देन को बिना किसी परिवर्तन को लागू किए केवल डेटा पढ़ना चाहिए।
timeout
: लेन-देन के संदर्भ को कितने सेकंड तक चलने देना चाहिए जब तक कि टाइमआउट अपवाद को फेंक न दिया जाए।
value
या transactionManager
: TransactionManager
लेन-देन के संदर्भ को बाध्य करते समय स्प्रिंग बीन का नाम इस्तेमाल किया जाएगा।
जावा ईई @Transactional
javax.transaction.Transactional
एनोटेशन (2013 लगभग) जावा ईई 7 विनिर्देश द्वारा जोड़ा गया है। तो, 8 वर्ष बाद जावा ईई एनोटेशन को जोड़ा गया जो कि उसका स्प्रिंग प्रतिरूप है।
जावा ईई @Transactional
सिर्फ 3 विशेषताओं को परिभाषित करता है:
dontRollbackOn
: Exception
लेन-देन रोलबैक को ट्रिगर किए बिना जावा वर्गों की सूची को ट्रिगर किया जा सकता है
rollbackOn
: जावा Exception
वर्गों की सूची जो फेंक दिए जाने पर लेनदेन रोलबैक को ट्रिगर करती है
value
: TxType
एनोम द्वारा दी गई प्रचार रणनीति । उदाहरण के लिए, यदि लेन-देन का संदर्भ विरासत में दिया जा सकता है (जैसे, REQUIRED
) या एक नया लेन-देन संदर्भ बनाया जाना चाहिए (जैसे, REQUIRES_NEW
) या यदि कोई अपवाद नहीं है तो अपवाद को फेंक दिया जाना चाहिए (उदाहरण के लिए MANDATORY
) या यदि अपवाद को फेंक दिया जाना चाहिए। यदि एक वर्तमान लेन-देन संदर्भ पाया जाता है (जैसे, NOT_SUPPORTED
)।
कौन सा चुनना है?
यदि आप स्प्रिंग या स्प्रिंग बूट का उपयोग कर रहे हैं, तो स्प्रिंग @Transactional
एनोटेशन का उपयोग करें , क्योंकि यह आपको जावा ईई @Transactional
एनोटेशन से अधिक विशेषताओं को कॉन्फ़िगर करने की अनुमति देता है ।
यदि आप अकेले जावा ईई का उपयोग कर रहे हैं, और आप अपने आवेदन को जावा ईई एप्लिकेशन सर्वर पर तैनात करते हैं, तो जावा ईई `` @ ट्रांसेक्शनल `एनोटेशन का उपयोग करें।
स्प्रिंग या जावा ईई @Transactional
परिभाषाओं का उपयोग करते समय अलगाव स्तर विन्यास अलग कैसे होता है, इस बारे में अधिक जानकारी के लिए , इस लेख को देखें ।
javax.transaction.Transactional
ताकि कोई भी अतिरिक्त कार्यों के बिना अब स्प्रिंग अनुप्रयोगों में भी इसका उपयोग कर सके। IMO, यह डिजाइन के दृष्टिकोण से काफी बुरा निर्णय था , क्योंकि मेरे अनुभव से बहुत सारे डेवलपर्स ने अपने कोड में इन दोनों को अनजाने में भ्रमित कर दिया, जिसके कारण समस्याएं होती हैं।