घोषणात्मक लेनदेन गुंजाइश
स्प्रिंग और जेपीए @Transactionएनोटेशन दोनों आपको दिए गए एप्लिकेशन लेनदेन के दायरे को परिभाषित करने की अनुमति देते हैं।
इसलिए, यदि किसी सेवा पद्धति को एनोटेशन के साथ एनोटेट किया जाता है @Transactional, तो यह एक लेन-देन के संदर्भ में चलेगा। यदि सेवा पद्धति कई DAO या रिपॉजिटरी का उपयोग करती है, तो सभी रीड एड ऑपरेशन एक ही डेटाबेस लेनदेन में निष्पादित किए जाएंगे।
वसंत @Transactional
org.springframework.transaction.annotation.Transactionalएनोटेशन स्प्रिंग ढांचे के 1.2 संस्करण (2005 लगभग) के बाद से उपलब्ध किया गया है, और यह आप निम्नलिखित व्यवहार गुणों को सेट करने की अनुमति देता है:
isolation: अंतर्निहित डेटाबेस अलगाव स्तर
noRollbackForऔर noRollbackForClassName: जावा Exceptionवर्गों की सूची जो बिना लेन-देन रोलबैक को ट्रिगर किए ट्रिगर की जा सकती है
rollbackForऔर rollbackForClassName: जावा Exceptionवर्गों की सूची जो फेंके जाने पर लेनदेन रोलबैक को ट्रिगर करती है
propagation: PropagationEnum द्वारा दिया गया लेन-देन प्रसार प्रकार । उदाहरण के लिए, यदि लेन-देन का संदर्भ विरासत में दिया जा सकता है (जैसे, 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, यह डिजाइन के दृष्टिकोण से काफी बुरा निर्णय था , क्योंकि मेरे अनुभव से बहुत सारे डेवलपर्स ने अपने कोड में इन दोनों को अनजाने में भ्रमित कर दिया, जिसके कारण समस्याएं होती हैं।