هل هو سوء الممارسة لتشمل خصائص/configuaration الملفات داخل الجرار ؟

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

سؤال

على سبيل المثال:

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

الآن حان الوقت لنشر MyApp.IDE يجعلها تافهة جدا إلى جرة حتى الصف الملفات وكذلك دعم ملفات التكوين.الآن نحن مجرد قطرة جرة في حاوية الويب و نذهب بعيدا....

في وقت لاحق في الأسبوع...تكوين الملقم البيانات اسم التطبيق يستخدم يحتاج إلى تغيير.مما يجعل أكثر من معنى ؟

A.تعديل الملقم.خصائص الملف مرة أخرى في IDE الأراضي وتوليد جديدة تماما ملف jar.نقل.(وهو ما يعني كذاب التطبيق بسيطة تغيير التكوين).

ب.اجراءات فتح بالفعل نشر جرة تعديل الملقم.خصائص الملف ؟ (قد تضطر إلى استدعاء وظيفة التحديث في اسم التطبيق إذا كان الملقم.خصائص مؤقتا...ولكن يجب أن لا تتطلب التطبيق الكامل ترتد.تحتاج أيضا أن نتذكر أن تعديل الخادم المصدر.خصائص وكذلك حتى في المستقبل تنشر لا تعود الخادم.خصائص الخادم القديم أسماء).

C.جعل الخادم.الخصائص الخارجية إلى ملف جرة في المقام الأول.مشابهة جدا ب عملية ، مع اختلاف بسيط لحفظ التكوين البيانات الخارجية إلى جرة (يدخل مسارات مختلفة بين التنمية و الإنتاج تنشر)

D.الأخرى:

وذلك بفضل!

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

المحلول

وكنت اذهب مع D.

وحاول لتحميل الملفات الخصائص من خارج جرة ثم، إذا فشل ذلك، تحميل العقارات المبنية في جرة.

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

نصائح أخرى

إذا كنت تستخدم الربيع ثم يمكنك الاستفادة من العنصر النائب الملكية للقيام بهذا العمل.

<!-- try and resolve the config from the filesystem first and then fallback to the classpath -->
<context:property-placeholder location="file:config.properties, classpath:config.properties"
                              ignore-resource-not-found="true"/>

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

<ع> استخدام هذا المزيج أيضا يسمح لك لتقسيم خصائص أكثر من الملفات، على سبيل المثال قد ترغب أبدا لتحديد كلمات المرور في ملف على CLASSPATH ونتوقع منها أن تكون محددة خارجيا على الملفات. سيتم حل أية خصائص مفقودة من الملفات من CLASSPATH.

في مجلد يحتوي على:

application.jar
config.properties

ويجب أن تكون قادرا على استخدام:

java -jar application.jar

وهذا هو config.properties عينة للرجوع اليها:

# This file contains properties that are used to configure the application
database.url=127.0.0.1
database.port=3306
database.user=root
database.pass=p4ssw0rd

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

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

وD.

وتحميل الخصائص في جرة. قم بإنشاء خصائص جديدة باستخدام خصائص جرة إد كما الإعدادات الافتراضية. ثم تحميل من خارج الجرة. وهذا يسمح حدد التخصيص من الممتلكات.

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

وأنت سيكون لديك لاستخدام JNDI للإشارة إلى مصدر البيانات التي تحتوي على البيانات الخاصة بك، أو رفع الخصائص في التحف النشر.

وبنك الإسكان للتجارة، على سبيل المثال، لا يسمح الوصول إلى الملفات مباشرة بشكل افتراضي.

والخيار D. في بيئات مختلفة قد تحتاج إلى تحديد يريدون تحديد الخصائص البيئية مثل الاتصال بقاعدة بيانات أو وكيل الخ.

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

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

كثير من الأحيان بل هو المعايير التي يجب أن يتم ترحيل كود <م> دون تغيير من الاختبار الى الانتاج. هذا يعني أنك قد لا تحرير ملفات configuation المضمنة. كما قد ينتهي في الحالة التي تكون فيها كنت بحاجة إلى تغيير تكوين نشر - الذي هو في كثير من الأحيان مرهقة للغاية. وبالتالي، نترك configuraiton خارج الجرار.

لترى تطبيقات جافا EE JNDI أو ملف الممتلكات في classpath.

ولدي تطبيق ويب حيث ريتريفيد التكوين من تطبيق ويب جارة لمجرد الفصل بين الاثنين. التي تحولت إلى أن تكون أسهل بكثير.

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

لأشياء مثل ما كنت تتحدث عنه، ومع ذلك، وأنا استخدم JNDI. يمكنك تحديد خصائص كموارد في ملف web.xml الخاص بك. وبهذه الطريقة، في أسوأ الأحوال، قمت بتحديث web.xml وليس التطبيق نفسه.

لبعض خوادم هناك طرق لتجاوز هذه القيم الموارد دون لمس WAR على الإطلاق. على سبيل المثال، في القط.

وأنا عادة جعل WAR واحدة لاختبار، Q / A والإنتاج وتجاوز الموارد الحساسة للبيئة في هذا بالضبط كان، وذلك باستخدام ملفات XML السياق القط و. وأعتبر أن هذا أفضل كثيرا من الاضطرار الى بناء الحروب المتعددة أو تعديل WARS، منذ التطبيق أنا اختبار مطابق تقريبا إلى التطبيق الذي هو في الإنتاج.

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

  • إذا كنت لا تحتاج إلى التحكم في الإصدار ، ثم الخيار D خارجي الملكية الملف الذي يتجاوز خاصية الملف هو فكرة جيدة.خيارات B و C هي أكثر انفتاحا على الاشياء الناشئة ، ولكن إذا كنت تهتم حقا كنت تستخدم في التحكم في الإصدار :-)
  • إذا كنت بحاجة إلى التحكم في الإصدار ، الخيار يمنحك المزيد من السيطرة ، ولكن إذا كان لديك إمكانية النشر المتعدد يمكنك أيضا تريد/تحتاج إلى التحكم في الإصدار التكوينات كل للنشر.مثال على ذلك هو منفصل نشر اختبار منصات الإنتاج.

هنا هو كيف نفعل ذلك باستخدام مخضرم وحدات مخضرم الحرب الملف "تراكب".

  1. لدينا عدة وحدات كود جافا المكونات.هذه هي جرة وحدات.
  2. لدينا "قاعدة webapp" وحدة محتوى ثابت ، JSPs الأساسية بيانات التكوين (الربيع الأسلاك ، الخصائص الافتراضية).هذه حرب الوحدة ، وذلك نتيجة المبنى هو الحرب التي تحتوي على فوق + جميع ملفات JAR.
  3. كل متميزة "تكوين الموقع" حرب الوحدة النمطية التي تحتوي على مواقع محددة يتجاوز عن خصائص الأسلاك الملفات والمحتوى.الأهم هو موضح باستخدام مخضرم الحرب "تراكب" آلية النتائج في حرب جديدة يجري تجميعها من "القاعدة" الحرب تجاوزات.

كل هذا يتم التحقق في التحكم في الإصدار ، و تحتاج إلى القيام مخضرم بناء والحرب النشر إلى إجراء تغييرات التكوين.

ولقد سألت سؤالا مماثلا. نحن لم أحسب كل شيء بها حتى الآن. ولكن نحن نبحث في الموارد URL. حيث يتم قراءة ملف بالمنشأة مباشرة من SVN. التحديث لا تحتاج إلى أي شيء آخر غير ملف الممتلكات.

لقد وضع J2EE التطبيقات باستخدام الربيع.لقد كان يركض نفس المشكلة وقتا طويلا ثم وجدت حلا.مشكلتي في تحديد خصائص قاعدة البيانات في خصائص الملف خارج الحرب ملف deploy.الحل وجدت أن هذا هو استخدام PropertyPlaceholderConfigurer وتحديد موقع المنشأة لتحديد موقع نظام مثل هذا ،

هذا هو بسيط جدا و عملت على ما يرام !

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