كيف يمكنك الحفاظ على تطبيقات الويب Java في بيئات مرحلية مختلفة؟

StackOverflow https://stackoverflow.com/questions/93944

سؤال

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

في تطبيق Spring، قد يكون لديك أيضًا حبوب تريد تحميلها في بيئة محلية ولكن ليس في بيئة إنتاج، والعكس صحيح.

كيف تتعاملون مع ذلك؟هل تستخدم ملفات منفصلة أو تصفية موارد ant/maven أو طرق أخرى؟

هل كانت مفيدة؟

المحلول

لقد قمت للتو بوضع الخصائص المختلفة في JNDI.بهذه الطريقة يمكن تكوين كل خادم ويمكنني الحصول على ملف حرب واحد.إذا كانت قائمة الخصائص كبيرة، فسوف أقوم باستضافة ملفات الخصائص (أو XML) على خادم آخر.سأستخدم JNDI لتحديد عنوان URL للملف المطلوب استخدامه.

إذا كنت تقوم بإنشاء ملفات تطبيقات مختلفة (war/ear) لكل بيئة، فأنت لا تقوم بنشر نفس war/ear الذي تختبره.

في أحد تطبيقاتي، نستخدم العديد من خدمات REST.لقد قمت للتو بوضع عنوان url الجذر في JNDI.وبعد ذلك، في كل بيئة، يمكن تكوين الخادم للاتصال بخدمة REST المناسبة لتلك البيئة.

نصائح أخرى

أنا فقط أستخدم ملفات تكوين Spring XML مختلفة لكل جهاز، وأتأكد من أن جميع أجزاء بيانات التكوين التي تختلف بين الأجهزة يتم الرجوع إليها بواسطة الفاصوليا التي يتم تحميلها من ملفات تكوين Spring تلك.

على سبيل المثال، لدي تطبيق ويب يتصل بواجهة Java RMI لتطبيق آخر.يحصل تطبيقي على عنوان واجهة RMI الخاصة بهذا التطبيق الآخر عبر وحدة تم تكوينها في ملف تكوين Spring XML.يحتوي كل من تطبيقي والتطبيق الآخر على مثيلات التطوير والاختبار والإنتاج، لذلك لدي ثلاثة ملفات تكوين لتطبيقي - واحد يتوافق مع التكوين المناسب لمثيل الإنتاج، وواحد لمثيل الاختبار، وواحد للمطور مثال.

بعد ذلك، الشيء الوحيد الذي أحتاج إلى الحفاظ عليه مستقيمًا هو ملف التكوين الذي سيتم نشره على أي جهاز.حتى الآن، لم أواجه أي مشاكل مع استراتيجية إنشاء مهام Ant التي تتعامل مع نسخ ملف التكوين الصحيح إلى مكانه قبل إنشاء ملف WAR الخاص بي؛وبالتالي، في المثال أعلاه، لدي ثلاث مهام Ant، ​​واحدة تولد حرب الإنتاج، وواحدة تولد حرب التطوير، وواحدة تولد حرب الاختبار.تتعامل جميع المهام الثلاث مع نسخ ملف التكوين الصحيح إلى المكان الصحيح، ثم استدعاء نفس الخطوة التالية، وهي تجميع التطبيق وإنشاء WAR.

نأمل أن يكون هذا منطقيا بعض الشيء...

نحن نستخدم ملفات خصائص خاصة بالبيئات ونطلب من بناء النمل تحديد المجموعة الصحيحة عند إنشاء الجرار/الحروب.

يمكن أيضًا التعامل مع الأشياء الخاصة بالبيئة من خلال خدمة الدليل (JNDI)، اعتمادًا على خادم التطبيق الخاص بك.نحن نستخدم Tomcat ويتم تعريف مصدر البيانات الخاص بنا في تطبيق JNDI للقراءة فقط الخاص بـ Tomcat.الربيع يجعل عملية البحث سهلة للغاية.

نستخدم أيضًا استراتيجية النمل لبناء مواقع مختلفة (محتوى مختلف، وأدوار أمنية، وما إلى ذلك) من نفس المشروع المصدر أيضًا.

هناك شيء واحد يسبب لنا مشكلة صغيرة في استراتيجية البناء هذه، وهو أنه في كثير من الأحيان لا توجد الملفات والأدلة حتى يتم تشغيل البناء، لذلك يمكن أن يجعل من الصعب كتابة اختبارات التكامل الحقيقية (باستخدام نفس مجموعة الربيع حتى عند نشرها) التي يمكن تشغيلها من داخل IDE.ستفقد أيضًا بعضًا من قدرة IDE على التحقق من وجود الملفات، وما إلى ذلك.

أستخدم Maven لتصفية الموارد ضمن src/main/resources في مشروعي.أستخدم هذا مع ملفات الخصائص لسحب السمات المخصصة في مشاريعي المستندة إلى Spring.

بالنسبة للإصدارات الافتراضية، لدي ملف خصائص في الدليل الرئيسي الخاص بي والذي يستخدمه Maven بعد ذلك كتجاوزات (لذا يتم العثور على أشياء مثل تثبيت Tomcat المحلي بشكل صحيح).خادم الاختبار وخادم الإنتاج هما ملفاتي الشخصية الأخرى.بسيط -Pproduction هو كل ما يتطلبه الأمر لإنشاء تطبيق لخادم الإنتاج الخاص بي.

استخدم ملفات خصائص مختلفة واستخدم مرشحات استبدال النمل التي ستقوم بالاستبدال بناءً على البيئة التي تم الإنشاء من أجلها.يرى http://www.devrecipes.com/2009/08/14/environment-special-configuration-for-java-applications/

ملفات تكوين منفصلة، ​​مخزنة في مستودع التحكم بالمصدر ويتم تحديثها يدويًا.عادةً لا يتغير التكوين بشكل جذري بين إصدار وآخر، لذا فإن المزامنة (حتى يدويًا) لا تمثل مشكلة كبيرة حقًا.

بالنسبة للأنظمة القابلة للتطوير بدرجة كبيرة في بيئات الإنتاج سأفعل ذلك بجد يوصي بنظام يتم فيه الاحتفاظ بملفات التكوين في قوالب، وكجزء من البرنامج النصي للبناء، تُستخدم هذه القوالب لتقديم ملفات التكوين "النهائية" (يجب أن تستخدم جميع البيئات نفس العملية).

لقد استخدمت مؤخرًا Maven أيضًا لتكوينات بديلة للبيئات الحية أو المرحلية. تكوين الإنتاج باستخدام ملفات تعريف Maven.نأمل أن يساعد.

أستخدم نسخة Ant مع ملف مرشح.في الدليل الذي يحتوي على ملف التكوين مع المتغيرات لدي دليل يحتوي على ملف لكل بيئة.يعرف البرنامج النصي للبناء البيئة ويستخدم الملف المتغير الصحيح.

لدي مجلدات تكوين مختلفة تحتوي على التكوينات الخاصة بالنشر المستهدف، وأستخدم ANT لتحديد المجلد الذي سأستخدمه أثناء مرحلة نسخ الملف.

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

أحد الحلول التي رأيتها مستخدمة هو تكوين بيئة التدريج بحيث تكون مطابقة لبيئة الإنتاج.وهذا يعني أن كل بيئة لديها شبكة محلية ظاهرية (VLAN) بنفس نطاق IP، وأدوار الجهاز على نفس عناوين IP (على سبيل المثال.عنوان IP لمجموعة db هو دائمًا 192.168.1.101 في كل بيئة).قامت جدران الحماية بتعيين عناوين خارجية لخوادم الويب، لذلك من خلال تبديل ملفات المضيف على جهاز الكمبيوتر الخاص بك، يمكن استخدام نفس عنوان URL - http://www.myapp.com/webapp/file.jsp سينتقل إما إلى التدريج أو الإنتاج، اعتمادًا على ملف المضيفين الذي قمت بتبديله.

لست متأكدًا من أن هذا هو الحل المثالي، فمن الصعب جدًا صيانته، لكنه حل مثير للاهتمام يجب ملاحظته.

ربما يكون لدى Caleb P وJeeBee الحل الأسرع لديك.بالإضافة إلى أنه ليس عليك إعداد خدمات مختلفة أو الإشارة إلى الملفات الموجودة على أجهزة مختلفة.يمكنك تحديد بيئتك إما باستخدام متغير ${user.name} أو عن طريق تحديد ملف التعريف في وسيطة -D لـ Ant أو Maven.

بالإضافة إلى ذلك، في هذا الإعداد، يمكن أن يكون لديك ملف خصائص عام، وملفات خصائص التجاوز لبيئات محددة.يدعم كل من Ant وMaven هذه القدرات.

لا تنس التحقق من PropertyPlaceholderConfigurer - وهذا مفيد بشكل خاص في البيئات التي لا يتوفر فيها JNDI

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top