هذه الطريقة مناسبة فقط للمشاريع الأصغر ، مثل خادم واحد أو خادمين فقط ، ويمكن تعديل ملف التكوين مباشرة. على سبيل المثال ، يتم نشر Spring MVC في شكل حزم الحرب ، ويمكن تعديل ملفات التكوين في الموارد مباشرة. إذا كان مشروع Boot Spring وتريد استخدام هذه الطريقة ، فأنت بحاجة إلى الرجوع إلى ملف قابل للتحرير خارجي ، مثل دليل ثابت ، لأنه يتم نشر معظم Boot Spring في حزم جرة ، ولا يمكن تعديل ملفات التكوين التي تدخلها مباشرة. إذا كان مشروعًا كبيرًا نسبيًا ، فمن الأفضل استخدام مركز تكوين ، مثل Apollo من CTRIP ، القنصل ، إلخ.
الطريقة الأصلية
تشير الطريقة الأصلية إلى إعادة تعبئة الخادم وإطلاقه في كل مرة تريد تعديل التكوين.
لنفترض أننا نستخدم Spring MVC لتطوير ، وبعد الانتهاء من التطوير ، سنشكل حزمة حرب ونشرها على Tomcat. إذا قمنا بتعديل عنوان واجهة الرسائل القصيرة في هذا الوقت.
نحن بحاجة إلى القيام بما يلي:
1. افتح ملف التكوين وتعديل معلومات التكوين ؛
2. تجميع وحزمة.
3. أوقف Tomcat وحذف دليل المشروع القديم ؛
4. ضع حزمة الحرب الجديدة في WebApps وابدأ Tomcat.
بالطبع ، يمكنك العثور مباشرة على ملف التكوين لهذا المشروع في Tomcat ثم تعديله ، ولكن تحتاج أيضًا إلى إعادة تشغيل Tomcat.
إذا قمت فقط بتطوير أو اختبار ، فمن المؤكد أنه من المقبول أن تكون مضيعة للوقت قليلاً. لذا ، لا أريد أن أضيع الوقت أو إعادة تشغيل Tomcat ، هل هناك أي طريقة؟ هذا هو تحول هذا المقال لتقديم.
طريقة الخدمات
توفر Java واجهة WatchService ، والتي تستخدم مراقبة الملفات الخاصة بنظام التشغيل لمراقبة الدلائل والملفات. عندما يتغير الكائن المراقب ، سيكون هناك إشعارات إشارة ، بحيث يمكن اكتشاف التغييرات بكفاءة.
المبدأ العام لهذه الطريقة هو: أولاً ، شاشة جديدة (WatchService) وفقًا لنظام التشغيل ، ثم حدد الدليل أو الملف الذي يتم فيه مراقبة ملف التكوين ، ثم الاشتراك في الأحداث المراد مراقبتها ، مثل إنشاء وحذف وتحرير وتسجيل الشاشة أخيرًا مع الموقع الذي تم مراقبه. بمجرد تشغيل الحدث المقابل للحدث المشترك ، يتم تنفيذ المنطق المقابل.
لنبدأ بالرمز. هذا في مشروع الربيع MVC ، ويتم مراقبة دليل الموارد.
repositorypublic class configwatcher {private static final logger = loggerfactory.getLogger (configwatcher.class) ؛ مراقبة الساعات الثابتة الخاصة ؛ postConstruct public void init () {logger.info ("شاشة ملف تكوين بدء") ؛ Try {WatchService = fileSystems.getDefault (). NewWatchService () ؛ url url = configwatcher.class.getResource ("/") ؛ path path = paths.get (url.touri ()) ؛ path.register (WatchService ، StandardWatcheventKinds.entry_modify ، standardwatcheventkinds.entry_create) ؛ } catch (استثناء e1) {e1.printstacktrace () ؛ } / *** ابدأ مؤشر ترابط المراقبة* / Thread WatchRead = New Thread (New WatchThread ()) ؛ Watchthread.setdaemon (صواب) ؛ WatchThread.start () ؛ / ** سجل لإغلاق الخطاف*/ thread hook = new thread (new RunNable () {Override public void run () {try {watchservice.close () ؛} catch (ioException e) {E.PrintStackTrace () ؛}}}) ؛ Runtime.getRuntime (). addshutdownhook (hook) ؛ } تنفذ WatchThread من الفئة العامة Runnable {Override public void run () {بينما (true) {try {// حاول الحصول على التغييرات في تجمع المراقبة ، إن لم يكن ، انتظر watchkey watchkey = watchservice.take () ؛ لـ (WatchEvent <؟> الحدث: watchkey.pollevents ()) {String editfilename = event.context (). toString () ؛ logger.info (editfilename) ؛ /*** تكوين إعادة التحميل*/} watchkey.reset () ؛ // لإكمال المراقبة ، تحتاج إلى إعادة تعيين الشاشة بمجرد catch (استثناء e) {eprintstacktrace () ؛ }}}}}الكود بسيط للغاية ويمكنك فهمه في لمحة. عندما يبدأ المشروع ، استخدم ملفات fileystems.getDefault (). NewWatchService () لإنشاء خدمة مراقبة ، والتي تعتمد على نظام التشغيل. ثم احصل على عنوان URL لدليل الموارد ، واحصل على المسار ، ثم اتصل بأسلوب التسجيل لكائن المسار ، وتسجيل الشاشة ، والاشتراك في تحرير الأحداث وإنشائها. يتم تعريف الأحداث في فئة StandardWatcheventKinds ، وهناك أربعة أنواع:
1. StandardWatcheventKinds#Overflow
2. StandardWatcheventKinds#entry_create
3. StandardWatcheventKinds#entry_delete
4. StandardWatcheventKinds#entry_modify
ثم يتم تشغيل مؤشر ترابط WatchThread بشكل منفصل للتعامل مع منطق التغيير ، ويتم استدعاء طريقة Take () في حلقة لا حصر لها حتى يحدث التغيير. بمجرد أن نراقب ملف التكوين ، يتم استدعاء منطقنا لإعادة تحميل التكوين. بالإضافة إلى ذلك ، بعد حدوث كل تغيير ، يجب استدعاء طريقة watchkey.reset () لإعادة ضبط الشاشة.
أخيرًا ، تحتاج إلى تسجيل خطاف ، ويمكنك إيقاف تشغيل الشاشة عند إغلاق JVM.
باستخدام هذه الطريقة ، عندما يكون لدينا بعض التغييرات في التكوين ، يمكننا الانتقال مباشرة إلى Tomcat لتعديل ملف التكوين ، ويمكن أن يصدر ساري المفعول دون إعادة التشغيل.
تقدم هذه المقالة بشكل أساسي هذه الطريقة ، والتي تم ذكرها أيضًا أعلاه. هذه الطريقة مناسبة فقط للمشاريع البسيطة للغاية. بالنسبة للمشاريع الواسعة النطاق ، مطلوب طريقة أكثر تقدما.
كيفية تكوين المركز
عندما يصبح تعقيد المشروع أعلى ، فإن تغييرات التكوين سارية المفعول في الوقت الفعلي ، وإصدار الرمادي ، وتقسيمها إلى بيئات ، وتكوينات إدارة الكتلة ، وقد تصبح أذونات وآليات التدقيق الكاملة جميعًا في المشروع. في هذا الوقت ، سيبدو الاعتماد فقط على ملفات التكوين غير كفء.
حاليًا ، تشمل مراكز التكوين الأكثر استخدامًا ETCD و ZOOKEEPER و DISCONF و APOLLO ، إلخ. DISCONF و APOLLO جاهزة للاستخدام ، مع وظائف كاملة ودعم واجهة المستخدم. وما إلى ذلك و zookeeper تتطلب بعض التطوير المخصص.
يمكن للطلاب الاختيار وفقًا لاحتياجاتهم ، ويمكن البحث في محتوى أكثر تفصيلاً وممارستهم بمفردهم.