वसंत प्रारंभिक आदेश

मान लीजिए मेरे पास वसंत सेम के कुछ जोड़े हैं:


   
   

"बी" एक दूरस्थ सेवा का खुलासा करता है जिसे "ए" की आवश्यकता नहीं होती है। मान लें कि "ए" लोड करने के लिए एक गैर-लापरवाह समय लेता है। इसका अर्थ यह है कि पुनरारंभ चक्र के दौरान, एप्लिकेशन दूरस्थ क्लाइंट को लटकाता है, जो वास्तव में सर्वर से कनेक्ट हो सकता है लेकिन वसंत कंटेनर पूरी तरह से प्रारंभ होने तक प्रतिक्रिया के लिए प्रतीक्षा करता है।

मैं क्या करने में सक्षम होना चाहता हूं, "बी" रिमोट सेवा तुरंत प्रतिक्रिया देगी, भले ही (आवेदन स्थिति के आधार पर) यह केवल NOT_READY या कुछ ऐसे ही लौटा सकता है। हालांकि, कंटेनर तब तक इंतजार करता है जब तक कि इसके सभी बीन्स शुरू नहीं हो जाते हैं, भले ही आप बीन्स को आलसी-इनिट के रूप में निर्दिष्ट करते हैं और लोड ऑर्डर के बावजूद।

मुझे संदेह है कि "बी" तुरंत उपलब्ध होने का मतलब यह होगा कि वसंत को आंशिक रूप से प्रारंभिक कंटेनर उपलब्ध कराया जाना चाहिए, जो खराब लगता है। हालांकि, मैं प्रारंभिक आदेश पर किसी भी जानकारी के किसी भी जानकारी की सराहना करता हूं और क्या आपको कोई उचित कामकाज मिल गया है।

2
क्या आप विस्तार कर सकते हैं कि बीन ए खुद को तत्काल करने के लिए "गैर-नगण्य समय" क्यों लेता है? क्या एक संभावित उत्तर फिर से फैक्टरिंग बीन ए है ताकि गैर-नगण्य समय तत्काल प्रक्रिया के बाहर बुलाया जाने वाला एक कार्य बन जाए?
जोड़ा लेखक David Harrison, स्रोत

2 उत्तर

बीन "ए" को सीधे संदर्भित न करें। इसके बजाय, एक बीन देखें जो बीन "ए" के लिए एक फैक्ट्री है; इस तरह, फैक्टरी बीन को "ए" को तुरंत शुरू करने के लिए प्रारंभिक हिट किए बिना बनाया जा सकता है। आपको अपनी कक्षाओं को दोबारा सुधारने की आवश्यकता होगी जो निश्चित रूप से "ए" को पुनः प्राप्त करने के लिए "ए" का संदर्भ लें।

या, आप एक बीन "एए" बना सकते हैं, जो कि बीन "ए" के लिए एक कंटेनर है, जिसमें प्रारंभिक स्थिति है, और जो बीन "ए" के इंटरफेस का खुलासा करता है; आमंत्रण पर, यह प्रारंभिकरण के लिए प्रारंभिक स्थिति सेट करता है, और कुछ धागे में बीन "ए" की शुरुआत शुरू करता है; "एए" पर "ए" के किसी इंटरफेस विधियों को कॉल करने के बाद या तो "एए" के भीतर "ए" शुरू होने तक, या तो तैयार प्रतिक्रिया को अवरुद्ध नहीं कर सकता है।

यह सब कुछ इस बात पर निर्भर करता है कि आपकी परिभाषा "लोड करने के लिए एक गैर-नगण्य समय लेती है" क्या है। लोड करने के लिए गैर-नगण्य समय क्यों लगता है? क्या ए के भीतर कुछ विशेष रूप से मुश्किल प्रारंभिक चल रहा है? या यह एक बहुत ही भयानक रूप से विशाल है कि यह जेवीएम को चकित करता है?

3
जोड़ा

मुझे समझ में नहीं आता है, "ए लोड करने के लिए एक गैर-लापरवाही का समय क्यों लेता है", लेकिन हो सकता है कि आप आलसी होकर ए आभासी शुरुआत कर सकें। प्रारंभिक बीन का उपयोग न करें या एप्लिकेशनवेन्ट को संभाल लें। संभालने के पहले अनुरोध पर बस आरंभ करें। यह पहला अनुरोध धीमा कर देगा!

दूसरी संभावना है कि प्रारंभिकरण को एक अनुप्रयोग थेंट को संभालने वाले बीन द्वारा बनाए गए एक अलग थ्रेड में स्थानांतरित करना है। थ्रेड बीन की प्रारंभिक विधि को एसिंक तरीके से कॉल करता है। अनियंत्रित बीन के लिए अनुरोधों को संभालने के लिए सावधान रहें!

0
जोड़ा
जबकि लोड, कॉलर टाइमआउट तक लटकते हैं, क्योंकि वे सॉकेट खोल सकते हैं लेकिन सर्वर प्रारंभ करने के लिए प्रतीक्षा करें। तुरंत प्रतिक्रिया देने के लिए सेवा लोड करने के लिए। मैं मैन्युअल रूप से प्रारंभिक पृष्ठभूमि थ्रेड में प्रारंभ करने के गन्दा विकल्प से बचने की उम्मीद कर रहा था।
जोड़ा लेखक Steve B., स्रोत