स्प्रिंग (विशेष रूप से वसंत अनुशंसित दृष्टिकोण: घोषणात्मक लेनदेन) का उपयोग करते समय डेडलॉक या लॉक टाइमआउट अपवादों पर एक लेनदेन को पुनरारंभ करने पर सबसे अच्छा अभ्यास क्या है?वसंत में डेडलॉक/लॉक-टाइमआउट पर लेनदेन को पुनरारंभ कैसे करें?
धन्यवाद,
आसफ
स्प्रिंग (विशेष रूप से वसंत अनुशंसित दृष्टिकोण: घोषणात्मक लेनदेन) का उपयोग करते समय डेडलॉक या लॉक टाइमआउट अपवादों पर एक लेनदेन को पुनरारंभ करने पर सबसे अच्छा अभ्यास क्या है?वसंत में डेडलॉक/लॉक-टाइमआउट पर लेनदेन को पुनरारंभ कैसे करें?
धन्यवाद,
आसफ
क्योंकि यह आवेदन विशेष पर निर्भर करता है वहाँ कोई सार्वभौमिक जवाब है। उदाहरण के लिए आप स्वचालित ट्रांज़ेक्टेड ऑपरेशन को फिर से शुरू करना या ऑपरेशन विफलता के बारे में उपयोगकर्ता को सूचित करना चाहते हैं और स्पष्ट पुनः प्रयास पुष्टिकरण आदि के लिए पूछें
मैं स्वचालित पुनरारंभ परिदृश्य के मामले में एओपी का उपयोग करूंगा।
मुझे लगता है कि स्प्रिंग के पास इस प्रश्न का एक अच्छा जवाब होना चाहिए (दस्तावेज़ीकरण के रूप में, कम से कम, या किसी प्रकार का पुनः प्रयास करने वाला)। हां, यह नहीं है।
शायद रीट्रीज़ को संभालने का सबसे अच्छा तरीका (यदि आप चीजों के बारे में "घोषणात्मक" होना जारी रखना चाहते हैं) अपने स्वयं के इंटरसेप्टर कार्यान्वयन को लिखना है जो लेनदेन को स्वचालित रूप से कॉन्फ़िगर किया गया है। शुरुआत के लिए, स्प्रिंग के TransactionInterceptor
का अध्ययन करें, जो घोषणात्मक लेनदेन के लिए प्रारंभ/रोलबैक/प्रतिबद्ध व्यवहार का प्रबंधन करता है। यदि आप हाइबरनेट का उपयोग कर रहे हैं, तो ध्यान दें कि यह वर्तमान थ्रेड के लिए हाइबरनेट सत्र बाध्यकारी/अनबाइंडिंग को कैसे संभालता है।
चीजें आप हाइबरनेट उपयोग कर रहे हैं के लिए बाहर देखने के लिए:
session.clear()
पर्याप्त नहीं है।)MethodInterceptor.invoke()
लागू कर रहे होंगे - MethodInvocation
उदाहरण जो इसमें पारित हो जाता है वह राज्यपूर्ण हो सकता है; आपको इंटरसेप्टर में इसका उपयोग करने से पहले इसे क्लोन करने की आवश्यकता हो सकती है।मैं वसंत पुन: प्रयास करें project, this तरह कॉन्फ़िगर किया गया से वर्ग org.springframework.retry.interceptor.RetryOperationsInterceptor
उपयोग करने की अनुशंसा:
<aop:config>
<aop:pointcut id="transactional" expression="execution(* com...*Service.remoteCall(..))" />
<aop:advisor pointcut-ref="transactional" advice-ref="retryAdvice" order="-1"/>
</aop:config>
<bean id="retryAdvice" class="org.springframework.retry.interceptor.RetryOperationsInterceptor"/>
लेकिन अगर आप अभी भी अपने आप से इसे लागू करना चाहते हैं, example of AOP from spring documentation एक अच्छी शुरुआत है।
मैं कई साल पहले एक ही सवाल था और एक AOP पहलू है, जो अपने कोड में इस तरह लग रही समाप्त होता है के रूप में my own solution लेखन समाप्त हो गया:
@RetryTransaction
@Transactional
public void doSomething() {
....
}
लिंक मर चुका है। –
धन्यवाद, लिंक अपडेट किया गया। – Archie
ओह वाह। बहुत बहुत धन्यवाद। मैं निश्चित रूप से इसे देख लूँगा। –
वसंत पुन: प्रयास परियोजना उल्लेख के लिए धन्यवाद। –