मैं PROPAGATION_REQUIRES_NEW
और PROPAGATION_NESTED
प्रसार नीतियों के बीच व्यवहार के अंतर को नहीं समझ सकता । मुझे ऐसा लगता है कि दोनों मामलों में, वर्तमान प्रक्रिया को रोलबैक किया गया है, लेकिन संपूर्ण लेनदेन नहीं। कोई सुराग?
मैं PROPAGATION_REQUIRES_NEW
और PROPAGATION_NESTED
प्रसार नीतियों के बीच व्यवहार के अंतर को नहीं समझ सकता । मुझे ऐसा लगता है कि दोनों मामलों में, वर्तमान प्रक्रिया को रोलबैक किया गया है, लेकिन संपूर्ण लेनदेन नहीं। कोई सुराग?
जवाबों:
यह लिंक देखें: PROPAGATION_NESTED बनाम PROPAGATION_REQUIRES_NEW? Juergen Hoeller ने इसे बहुत अच्छी तरह से समझाया। - स्प्रिंग सोर्स फोरम 28 फरवरी, 2019 को पूरी तरह से ऑफलाइन साइस है, लेकिन आप नीचे दिए गए उद्धरण में लेख का प्रासंगिक हिस्सा पढ़ सकते हैं
PROPAGATION_REQUIRES_NEW दिए गए क्षेत्र के लिए एक नया, स्वतंत्र "आंतरिक" लेनदेन शुरू करता है। यह लेन-देन बाहरी लेनदेन से पूरी तरह से स्वतंत्र होगा या लुढ़का होगा, इसका अपना अलग-अलग दायरा होगा, ताले का अपना सेट होगा, इत्यादि बाहरी लेनदेन आंतरिक एक की शुरुआत में निलंबित हो जाएंगे, और एक बार फिर से शुरू हो जाएगा। पूरा कर लिया है। ...
दूसरी ओर PROPAGATION_NESTED एक "नेस्टेड" लेन-देन शुरू करता है, जो मौजूदा एक का एक वास्तविक सबट्रैक्शन है। क्या होगा कि नेस्टेड लेनदेन की शुरुआत में एक बचत बिंदु लिया जाएगा। Í यदि नेस्टेड लेन-देन विफल रहता है, तो हम उस सेव पॉइंट पर वापस आ जाएंगे। नेस्टेड लेनदेन बाहरी लेनदेन का हिस्सा है, इसलिए यह केवल बाहरी लेनदेन के अंत में प्रतिबद्ध होगा। ...
PROPAGATION_REQUIRES_NEW: प्रत्येक प्रभावित लेनदेन गुंजाइश के लिए पूरी तरह से स्वतंत्र लेनदेन का उपयोग करता है। उस स्थिति में, अंतर्निहित भौतिक लेनदेन अलग-अलग होते हैं और इसलिए स्वतंत्र रूप से वापस कर सकते हैं या रोल कर सकते हैं, बाहरी लेनदेन के साथ आंतरिक लेन-देन की स्थिति से प्रभावित नहीं होते हैं।
PROPAGATION_NESTED: एक से अधिक सहेजने वाले एकल भौतिक लेनदेन का उपयोग करता है जिसे वह वापस रोल कर सकता है। इस तरह के आंशिक रोलबैक एक आंतरिक लेन-देन की गुंजाइश को इसके दायरे के लिए रोलबैक को ट्रिगर करने की अनुमति देते हैं, बाहरी लेनदेन के साथ कुछ लेनदेन वापस होने के बावजूद भौतिक लेनदेन को जारी रखने में सक्षम होते हैं। यह सेटिंग आमतौर पर JDBC सेवप्वाइंट पर मैप की जाती है, इसलिए केवल JDBC रिसोर्स ट्रांजेक्शन के साथ काम करेगी।
वसंत प्रलेखन की जाँच करें
PROPAGATION_REQUIRES_NEW
: बाहरी लेन-देन आंतरिक एक की शुरुआत में निलंबित हो जाएगा, और एक बार आंतरिक पूरा होने के बाद फिर से शुरू हो जाएगा। प्रत्येक आंतरिक लेनदेन पूर्ण होने पर / रोलबैक किया जाता है। PROPAGATION_NESTED
: नेस्टेड लेनदेन बाहरी लेनदेन का हिस्सा है, इसलिए यह केवल बाहरी लेनदेन के अंत में प्रतिबद्ध होगा।
कृपया अंतर खोजें
1.) Use of NESTED Transaction
एक नेस्टेड लेनदेन के भीतर निष्पादित करें यदि कोई मौजूदा लेनदेन मौजूद है, तो PROPAGATION_REQUIRED की तरह व्यवहार करें। नेस्टेड लेनदेन स्प्रिंग द्वारा समर्थन कर रहा है
2.) आवश्यक लेनदेन का उपयोग एक मौजूदा लेनदेन का समर्थन करें, यदि कोई मौजूद नहीं है तो एक नया बनाएं। । इसका मतलब बैंकिंग डोमेन के लिए निकासी, जमा, लेन-देन को अपडेट करना है
3.) REQUIRES_NEW लेनदेन का उपयोग एक नया लेनदेन बनाएं, और यदि कोई मौजूद है तो वर्तमान लेनदेन को निलंबित करें।