خلفية
يتم استخدام Springboot بشكل متزايد من قبل الجميع لتحقيق النشر الساخن باستخدام Springboot DevTool
يظهر نفس الفئة castexception
تحليل
أولاً ، حدد ما إذا كان القاحلة في نفس الفئة يظهر ، على سبيل المثال ، لأن جهاز تحميل الفئة مختلف.
ما إذا كان الفصل هو نفسه يعتمد على عاملين
أي أن الفصل الذي يشرحه مختلف لاعبي الدرجة المختلفة هو فئة مختلفة
الاستخدام الشائع لـ JDBC عندما نتعلم
/** * إرجاع كائن {code class} المرتبط بالفئة أو واجهة * مع اسم السلسلة المحددة. إن استدعاء هذه الطريقة * يعادل: * * <blockquote> * {code class.forname (className ، true ، currentloader)} * </blockquote> * حيث يشير {code currentloader} * * <p> على سبيل المثال ، تُرجع جزء الكود التالي واصف * {code class} للفئة المسماة * {code java.lang.throad}: * * <blockquote> * {code class t = class.forname ("java.lang.thread") يسبب الفئة المسمى * {code x} المراد تهيئتها. * * param className الاسم المؤهل بالكامل للفئة المطلوبة. * regurn كائن {code class} للفئة مع اسم * المحدد. * exception linkageError إذا فشل الارتباط * exception issectionInitializerError إذا فشل التهيئة * في هذه الطريقة ، فشلت * @exception classnotfoundexception إذا كان لا يمكن تحديد موقع الفصل */الفئة الثابتة العامة <؟> forname (string classname)مما سبق ، يمكننا أن نفهم أن نفس الفئات التي يشرحها قوائي الدرجة المختلفين لا يمكن أن تتحول إلى بعضهم البعض.
وبهذه الطريقة نستهدف devtools.
لقد قدمنا التبعيات التالية في سبرينغ بوت
<Rependency> <roupeD> org.springframework.boot </rougiD> <intifactid> spring-boot-devtools </shintifactid> <اختياري> true </perical> </sependency>
إذن كيف تستبعد تبعيات DevTool؟
إضافة في التطبيق
spring.devtools.restart.enabled = false
لقد وجدت أنه لا يزال من الممكن رؤية RetartedMain المستخدمة عند البدء
2018-03-19 22: 04: 37.641 info 53428 --- 22:03:34 CST 2018] ؛ جذر التسلسل الهرمي للسياق
2018-03-19 22: 04: 37.654 info 53428 ---
2018-03-19 22: 04: 37.956 info 53428 ---
2018-03-19 22: 04: 37.956 info 53428 ---
لماذا تم تسمية الخيط المسمى RetartedMain spring.devtools.restart.endabled غير صالح؟
شفرة
يتم استخدام ApplicationListener في الحزمة المقابلة لـ DevTools
private void onapplicationStartingevent (ApplicationStartingEvent حدث) {// من السابق لأوانه استخدام بيئة الربيع ولكن لا يزال يتعين علينا السماح للمستخدمين بتعطيل إعادة التشغيل باستخدام خاصية النظام. سلسلة تمكين = system.getProperty (enupper_property) ؛ if (enabled == null || boolean.parseboolean (actabled)) {string [] args = event.getArgs () ؛ defaultRestArtInitializer Entirmizer = جديد defaultrestartinitializer () ؛ Boolean Resprartoninitialize =! AgentReloader.isActive () ؛ RESTARTER.INITIALIZE (args ، false ، unitializer ، receptoninitialize) ؛ } آخر {restarter.disable () ؛ }}من الواضح أن المساءة تتم قراءة بالفعل من متغيرات النظام بدلاً من بيئة الربيع. كما يقول التعليق ، من السابق لأوانه استخدام خاصية الربيع في هذه اللحظة.
لذلك ، يمكن استخدام متغيرات النظام
لذلك يمكننا استخدام معلمات JVM
-dspring.devtools.restart.enabled = false
من المؤكد أن كل شيء على ما يرام في هذا الوقت
2018-03-19 22: 18: 12.928 Info 66260 --- [Main]
2018-03-19 22: 18: 13.131 info 66260 --- [main] ationConfigemBedDedWebPlicationContext: org.springframework.boot.context.embedded.annotationConfiGeddedDedWebPlication@2a4354cb: atharup dateup. 2018] ؛ جذر التسلسل الهرمي للسياق
إذن ما هو الغرض من التكوين في ملف تكوين الربيع؟
/*** إعادة تشغيل الخصائص. */إعادة تشغيل الفئة الثابتة العامة {private Static Final String default_restart_excludes = "meta-inf/maven/** ،" + "meta-inf/** ، الموارد/** ، ثابت/** ، public/** ، templates/** ،" + "**/*test.class ، **/*tests.class ، git.properties ، meta-inf/build-info.properties" ؛ خاص ثابت نهائي طويل default_restart_poll_interval = 1000 ؛ خاص ثابت نهائي طويل الافتراض _Restart_Quiet_Period = 400 ؛ /*** تمكين إعادة التشغيل التلقائي. */ تم تمكين منطقية خاصة = صواب ؛ /*** الأنماط التي يجب استبعادها من تشغيل إعادة تشغيل كاملة. */ سلسلة خاصة exclude = default_restart_excludes ؛ /*** أنماط إضافية يجب استبعادها من تشغيل إعادة تشغيل كاملة. */ سلسلة خاصة إضافية ؛ /*** مقدار الوقت (في مليون ثانية) للانتظار بين الاقتراع من أجل تغييرات classpath. */ private pollinterval = default_restart_poll_interval ؛ /** * مقدار الوقت الهادئ (في مليون ثانية) المطلوبة دون أي تغييرات ClassPath * قبل تشغيل إعادة التشغيل. */ private long QuietPeriod = default_restart_quiet_period ؛ /*** اسم ملف معين عند تغييره سيؤدي إلى قيام التحقق من إعادة التشغيل. إذا لم يتم تحديد أي تغيير ملف ClassPath سيؤدي إلى إعادة التشغيل. */ سلسلة خاصة triggerfile ؛ /*** مسارات إضافية لمشاهدة التغييرات. */ قائمة خاصة <ible> إضافية = ArrayList جديد <ilement> () ؛ boolean public isEnabled () {return this.enabled ؛ } public void setEnabled (Boolean Enabled) {this.enabled = actabled ؛ }من الكود ، يبدو أنه يتم استخدامه لتكوين ما إذا كان يمكن إعادة تشغيل الاستماع تلقائيًا
/*** تكوين إعادة التشغيل المحلي. */ conditionalOnProperty (prefix = "spring.devtools.restart" ، name = "Enupply" ، matchifmissing = true) static class RetartConfiguration {autowired private devtoolsproperties properties ؛ eventListener public void onClassPathanged (classPathChangedEvent event) {if (event.isrestarTrequired ()) {restarter.getInstance (). إعادة التشغيل (fileWatchingFailureHandler (filesystemwatcherfactory ())) ؛ }} @beanconditionalonmissingbean public classpathfilesystemwatcher classPathFilesystemWatcher () {url [] urls = restarter.getInstance (). getInitialUrls () ؛ classpathfilesystemwather watcher = new ClassPathFilesystemWatcher (filesystemwatherfactory () ، classPathresTrategy () ، urls) ؛ Watcher.SetStopWatcherOnrestart (True) ؛ مراقب العودة } beanconditionalonMissingBean public ClassPathresTrategy classPathresTrategy () {return new patternclasspathresTartStrategy (this.properties.getRestart (). getAllexClude ()) ؛ } bean public hatooasobjenesiscachedisabler hatooasobjenesiscachedisabler () {return new HateOasobjenesiscachedisabler () ؛ } bean publicistemstemwatherfactory fileystemwatcherfactory () {return new fileystemwatherfactory () {override publicystemwatcher getFileSystemWatcher () {return newFilesystemWatcher () ؛ }} ؛ } ملفات الملفات الخاصة newFileSystemWatcher () {retart retartProperties = this.properties.getRestart () ؛ FileSystemWatcher Watcher = new FileSystemWatcher (true ، retartProperties.getPollinterval () ، retartproperties.getquietperiod ()) ؛ String TriggerFile = retartProperties.getTriggerFile () ؛ if (stringUtils.haslength (triggerfile)) {watcher.setTriggerFilter (New TriggerFileFilter (triggerfile)) ؛ } list <Ipair> extrempaths = retartProperties.getAdditionalPaths () ؛ لـ (مسار الملف: extrempaths) {watcher.addsourceFolder (path.getabsolutefile ()) ؛ } مراقب الإرجاع ؛ }}}يرجع التكوين بأكمله ما إذا كان سيتم تسجيل خدمة الساعات المقابلة
بالطبع يمكننا أيضًا إزالة الجرة
تجدر الإشارة إلى أنه عند التعليق على هذا الرمز ، تحتاج إلى إعادة إعادة
MVN نظيفة
خلاف ذلك ، قد لا يكون من الممكن استبعاد الجرة تلقائيًا
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.