ترتيب التهيئة الربيع

لنفترض أن لديّ زوجين من حبوب الربيع:


   
   

يعرض "B" خدمة بعيدة لا تحتاج إلى "A". افترض أن "A" يستغرق وقتًا غير مهملاً للتحميل. ما يعنيه هذا هو أنه أثناء دورة إعادة التشغيل ، يقوم التطبيق بتعليق العميل البعيد ، والذي يمكنه بالفعل الاتصال بالخادم ولكنه ينتظر استجابة حتى تتم تهيئة حاوية الربيع بشكل كامل.

ما أريد أن أكون قادرًا على القيام به هو استجابة الخدمة البعيدة "B" على الفور ، حتى إذا كان (استنادًا إلى حالة التطبيق) يمكنه فقط إرجاع NOT_READY أو بعض هذه. على الرغم من ذلك ، تقوم الحاوية بفرض الانتظار حتى تتم تهيئة كل الفاصوليا ، حتى إذا قمت بتحديد الفاصوليا كطريقة كسول وبغض النظر عن ترتيب التحميل.

وأظن أن وجود "ب" متاح على الفور يعني أن الربيع سيتعين عليه توفير حاوية مبدئية جزئياً ، تبدو سيئة. ومع ذلك ، فإنني أقدّر أي معلومات حصل عليها أي شخص على طلب التهيئة وما إذا كنت قد وجدت أي حلول معقولة.

2
هل يمكنك توضيح سبب اتخاذ Bean "وقتًا لا يستهان به" لتأكيد نفسه؟ هل من الممكن الإجابة على إعادة حساب Bean بحيث يصبح الوقت غير الذي لا يستهان به وظيفة تسمى خارج عملية إنشاء المظهر؟
وأضاف المؤلف David Harrison, مصدر

2 إجابة

لا تشير إلى الفول "أ" مباشرة. بدلاً من ذلك ، ارجع إلى الفول الذي يعتبر مصنعًا للفول "أ" ؛ بهذه الطريقة ، يمكن إنشاء حبة المصنع دون الحصول على نتيجة التهيئة لتفعيل "A". سوف تحتاج إلى refactor فصولك التي تشير إلى "A" لاسترداد "A" أولا ، بالطبع.

أو يمكنك إنشاء حبة "AA" ، وهي عبارة عن حاوية للفول "A" ، والتي تحتوي على حالة تهيئة ، والتي تعرض واجهة الحبة "A" ؛ عند الاستدعاء ، يتم تعيين حالة التهيئة الخاصة به إلى عدم التهيئة ، ويبدأ التهيئة لـ "A" في بعض الخيط ؛ استدعاءات إلى أية طرق واجهة "A" على "AA" يمكن ثم إما منع أو إرجاع استجابة غير جاهز حتى اكتمال تهيئة "A" ضمن "AA".

يتوقف كل هذا على ما هو تعريفك لـ "يستغرق وقتًا لا يستهان به ليتم تحميله". لماذا يستغرق تحميله وقتا غير مهم؟ هل هناك بعض التهيئة الصعبة بشكل خاص والتي تحدث داخل A؟ أم هو مجرد ضخم جدا بحيث انه يخنق JVM؟

3
وأضاف

أنا لا أفهم ، لماذا "A يأخذ وقت غير مهمل للتحميل" ، ولكن ربما يمكنك أن تهيئ نفسك عن طريق إعادة تكديس A. لا تستخدم InitializingBean أو التعامل مع ApplicationEvent. مجرد تهيئة على أول طلب ليتم التعامل معها. هذا سوف تبطئ أول طلب!

الاحتمال الآخر هو نقل التهيئة إلى سلسلة مفصولة تم إنشاؤها بواسطة حبة معالجة ApplicationEvent. يستدعي مؤشر الترابط طريقة التهيئة للحبة بطريقة متزامن. كن حذرا للتعامل مع الطلبات إلى الفول غير مهيأ!

0
وأضاف
أثناء التحميل ، يتوقف المتصلون حتى انتهاء المهلة ، حيث يمكنهم فتح مأخذ توصيل لكنهم ينتظرون إكمال تهيئة الخادم. الرجاء تحميل الخدمة يدويًا للرد على الفور. كنت اتمنى تجنب البديل الفوضوي للتهيئة في موضوع الخلفية يدويا.
وأضاف المؤلف Steve B., مصدر