2010-03-08 11 views
6

मेरे एप्लिकेशन आने वाले संदेशों को संसाधित करने के लिए स्प्रिंग DefaultMessageListenerContainer का उपयोग करता है। ऐप का मुख्य तरीका पहले ही शट डाउन हुक पंजीकृत करता है।एक बीन से स्प्रिंग शटडाउन को मजबूर करने का सबसे अच्छा तरीका?

प्रश्न यह है: एप्लिकेशन संदर्भ को बंद करने के लिए मजबूर करने का सबसे अच्छा तरीका क्या है?

अगर मैं संदेश श्रोता में RuntimeException फेंक देता हूं, तो इसे कंटेनर द्वारा नियंत्रित किया जाता है, और पारित नहीं किया जाता है। System.exit को स्वीकार्य है? क्या मैं ApplicationContext के साथ प्रत्येक कक्षा में बंद होने की आवश्यकता है, इसलिए मैं close() पर कॉल कर सकता हूं?

+1

कारण है कि आप बंद करने की आवश्यकता है आवेदन संदर्भ नीचे? – Bozho

+0

क्योंकि संदेश श्रोता यह तय कर सकता है कि इसकी आवश्यकता है; या तो क्योंकि इसे ऐप को बंद करने के लिए एक प्रशासनिक संदेश प्राप्त हुआ है, या क्योंकि असामान्य स्थिति हुई है। उनमें से बहुत सारे हैं, उनमें से एक बहुत अधिक रिट्री प्राप्त हो रहा है (यह एक उच्च मात्रा प्रणाली है) – xcut

उत्तर

13

आप अपने आवेदन संदर्भ को ConfigurableApplicationContext पर डाल सकते हैं और उस पर close() पर कॉल कर सकते हैं। कम से कम ऐसा होता है जब वेब-अनुप्रयोग वातावरण में संदर्भ बंद हो जाता है, मामलों में सर्वलेट संदर्भ नष्ट हो जाता है।

आप ApplicationContext के ahold पाने चाहते हैं, अपने सेम लागू कर सकते हैं ApplicationContextAware

एक अन्य विकल्प इंजेक्षन करने के लिए है (या @Autowired साथ autowire) आवेदन संदर्भ:

@Inject 
private ApplicationContext ctx; 
+0

बीन को बंद करने की आवश्यकता वाले संदर्भ को संदर्भ कैसे मिलता है? यह सब के बाद एक POJO है .. – xcut

+0

@xcut यह आपके आवेदन पर निर्भर करता है। क्या यह एक वेब अनुप्रयोग है, एक डेस्कटॉप अनुप्रयोग? – Bozho

+0

न तो - एक संदेश कतार/रूटिंग प्रणाली। तो मुझे लगता है कि एकमात्र तरीका बीन को संदर्भ पारित करना होगा, या किसी प्रकार के अतिरिक्त जीवन चक्र इंटरफेस को लागू करना होगा? – xcut

संबंधित मुद्दे