พื้นหลัง
Springboot ถูกใช้มากขึ้นโดยทุกคนเพื่อให้ได้การปรับใช้อย่างร้อนแรงโดยใช้ Springboot Devtool
castexception คลาสเดียวกันจะปรากฏขึ้น
วิเคราะห์
ขั้นแรกให้ตรวจสอบว่า castexception ของคลาสเดียวกันจะปรากฏขึ้นหรือไม่เช่นเนื่องจากคลาสโหลดนั้นแตกต่างกัน
ไม่ว่าชั้นเรียนจะเหมือนกันหรือไม่ขึ้นอยู่กับสองปัจจัย
นั่นคือคลาสที่อธิบายโดยคลาสที่แตกต่างกันคือคลาสที่แตกต่างกัน
การใช้งานทั่วไปของ JDBC เมื่อเราเรียนรู้
/** * ส่งคืนวัตถุ {@code class} ที่เชื่อมโยงกับคลาสหรือ * อินเตอร์เฟสด้วยชื่อสตริงที่กำหนด การเรียกใช้วิธีนี้คือ * เทียบเท่ากับ: * * <blockquote> * {@code class.forName (className, true, currentloader)} * </blockquote> * โดยที่ {@code currentloader} หมายถึงตัวโหลดคลาสที่กำหนดของคลาสปัจจุบัน * * <p> ตัวอย่างเช่นส่วนโค้ดต่อไปนี้ส่งคืน * รันไทม์ {@code class} descriptor สำหรับคลาสชื่อ * {@code java.lang.thread}: * * <blockquote> * {@code class t = class.forname ("java.lang.lang" ทำให้คลาสชื่อ * {@code x} เริ่มต้น * * @param classname ชื่อที่ผ่านการรับรองของคลาสที่ต้องการ * @return วัตถุ {@code class} สำหรับคลาสด้วยชื่อ * ที่ระบุ * @Exception linkageERror หากการเชื่อมโยงล้มเหลว * @Exception ExceptionInInitializerError หากการเริ่มต้นกระตุ้น * โดยวิธีนี้ล้มเหลว * @Exception classnotFoundException หากคลาสไม่สามารถอยู่ได้จากข้างต้นเราสามารถเข้าใจได้ว่าคลาสเดียวกันที่อธิบายโดยคลาสที่แตกต่างกันไม่สามารถแปลงเป็นกันได้
ด้วยวิธีนี้เรากำหนดเป้าหมาย Devtools
เราได้แนะนำการพึ่งพาต่อไปนี้ใน Springboot
<Effercy> <roupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Devtools </artifactid>
ดังนั้นจะแยกการพึ่งพาของ Devtool ได้อย่างไร?
เพิ่มใน application.properties
spring.devtools.restart.enabled = false
ฉันพบว่าการรีสตาร์ทเมนยังคงสามารถมองเห็นได้เมื่อเริ่มต้น
2018-03-19 22: 04: 37.641 ข้อมูล 53428 --- [รีสตาร์ทเมน] SWSMMAREQUESTMAPPIONDHANDLERADAPTER: มองหา @ControllerAdvice: org.springframework.boot.contex CST 2018]; รากของลำดับชั้นบริบท
2018-03-19 22: 04: 37.654 ข้อมูล 53428 --- [รีสตาร์ทเมน] SWSMMAREQUESTMAPPIONDHANDLERADAPTER: ตรวจพบการตอบสนองของ BOANDIDENTIN
2018-03-19 22: 04: 37.956 ข้อมูล 53428 --- [retartedmain] Oswshandler.simpleurlhandlermapping: เส้นทาง URL ที่แมป [/swagger-ui.html] บนตัวจัดการประเภท [class org.springframework.web.servlet
2018-03-19 22: 04: 37.956 ข้อมูล 53428 --- [retartedmain] Oswshandler.simpleurlhandlermapping
เหตุใดเธรดชื่อ RetartedMain set spring.devtools.restart.enabled ไม่ถูกต้อง?
รหัส
ApplicationListener ใช้ในแพ็คเกจที่สอดคล้องกับ Devtools
โมฆะส่วนตัว onapplicationstartingEvent (ApplicationStartingEvent Event) {// มันเร็วเกินไปที่จะใช้สภาพแวดล้อมฤดูใบไม้ผลิ แต่เราควรอนุญาตให้ // ผู้ใช้ปิดการใช้งานรีสตาร์ทโดยใช้คุณสมบัติระบบ string enabled = system.getProperty (enabled_property); if (enabled == null || boolean.parseboolean (เปิดใช้งาน)) {string [] args = event.getArgs (); defaultrestartinitializer initializer = ใหม่ defaultrestartinitializer (); บูลีน retartonInitialize =! AgentReloader.isactive (); RESTARTER.INITIALIZE (ARGS, FALSE, Initializer, RESTARTONINITIALIZE); } else {restarter.disable (); -เห็นได้ชัดว่าร้านอาหารนั้นถูกอ่านจริงจากตัวแปรระบบมากกว่าจากสภาพแวดล้อมฤดูใบไม้ผลิ ตามที่ความคิดเห็นบอกว่ามันเร็วเกินไปที่จะใช้คุณสมบัติฤดูใบไม้ผลิในขณะนี้
ดังนั้นจึงสามารถใช้ตัวแปรระบบได้
ดังนั้นเราสามารถใช้พารามิเตอร์ JVM
-DSPRING.DEVTOOLS.RESTART.ENABLED = FALSE
ทุกอย่างก็โอเคในเวลานี้
2018-03-19 22: 18: 12.928 ข้อมูล 66260 --- [หลัก] com.f6car.base.application: โปรไฟล์ต่อไปนี้มีการใช้งาน: dev
2018-03-19 22: 18: 13.131 ข้อมูล 66260 --- [หลัก] AtionConfigembeddedWebapplicationContext: การรีเฟรช org.springframework.boot.context.embedded.annotationconfigembeddedwebapplicationContex รากของลำดับชั้นบริบท
ดังนั้นวัตถุประสงค์ของการกำหนดค่าในไฟล์การกำหนดค่าของฤดูใบไม้ผลิคืออะไร?
/*** การรีสตาร์ทคุณสมบัติ */คลาสสแตติกสาธารณะรีสตาร์ท {สตริงสุดท้ายคงที่เริ่มต้น default_restart_excludes = "meta-inf/maven/**," + "meta-inf/resources/**, ทรัพยากร/**, คงที่/**, สาธารณะ/**, เทมเพลต/**," + "**/*test.class, **/*tests.class, git.properties, meta-inf/build-info.properties"; ส่วนตัวคงที่สุดท้าย long default_restart_poll_interval = 1000; ส่วนตัวคงที่สุดท้าย Long Default_restart_quiet_period = 400; /*** เปิดใช้งานการรีสตาร์ทอัตโนมัติ */ บูลีนส่วนตัวเปิดใช้งาน = true; /*** รูปแบบที่ควรแยกออกจากการเรียกใช้การรีสตาร์ทแบบเต็ม */ สตริงส่วนตัว exclude = default_restart_excludes; /*** รูปแบบเพิ่มเติมที่ควรแยกออกจากการเรียกใช้การรีสตาร์ทแบบเต็ม */ สตริงส่วนตัวเพิ่มเติม /*** ระยะเวลา (เป็นล้านวินาที) เพื่อรอระหว่างการสำรวจความคิดเห็นสำหรับการเปลี่ยนแปลง classpath */ pollinterval ยาวส่วนตัว = default_restart_poll_interval; /** * จำนวนเวลาที่เงียบ (เป็นล้านวินาที) ที่จำเป็นโดยไม่มีการเปลี่ยนแปลง classpath * ก่อนที่จะมีการรีสตาร์ท */ ส่วนตัว Long QuietPeriod = default_restart_quiet_period; /*** ชื่อของไฟล์เฉพาะที่เมื่อมีการเปลี่ยนแปลงจะทริกเกอร์การตรวจสอบการรีสตาร์ท หาก * ไม่ได้ระบุการเปลี่ยนแปลงไฟล์ classpath ใด ๆ จะทริกเกอร์รีสตาร์ท */ สตริงส่วนตัว triggerfile; /*** เส้นทางเพิ่มเติมเพื่อดูการเปลี่ยนแปลง */ รายการส่วนตัว <file> motidePaths = new ArrayList <File> (); บูลีนสาธารณะ isenabled () {return this.enabled; } โมฆะสาธารณะ setEnabled (เปิดใช้งานบูลีน) {this.enabled = enabled; -จากรหัสดูเหมือนว่าจะใช้เพื่อกำหนดค่าว่าการฟังสามารถรีสตาร์ทได้โดยอัตโนมัติ
/*** การกำหนดค่าการรีสตาร์ทในพื้นที่ */ @ConditionAlonProperty (prefix = "spring.devtools.restart", name = "enabled", matchifMissing = true) คลาสคงที่ restConfiguration {@autowired Private DevToolsProperties; @EventListener เป็นโมฆะสาธารณะ onclassPathChanged (เหตุการณ์ classpathChangedEvent) {ถ้า (Event.isRestartRequired ()) {RESTARTER.GETINSTANCE (). รีสตาร์ท (ใหม่ FELEWATCHINGFAILUREHANDLER }} @Bean @ConditionAlonMissingBean Public ClassPathFilesystemWatcher classPathFilesystemWatcher () {url [] urls = restarter.getInstance (). getInitialUrls (); classpathfilesystemwatcher watcher = ใหม่ classpathfilesystemwatcher (filesystemwatcherfactory (), classpathrestartstrategy (), urls); Watcher.SetStopWatcherOnRestart (จริง); ผู้เฝ้าดูกลับ; } @Bean @ConditionAlonMissingBean Public ClassPathrestartStrategy classpathrestartStrategy () {ส่งคืนรูปแบบใหม่ classPathRestartStrategy (this.properties.getRestart (). getallexclude ()); } @Bean Public HateoAsobjenesiscachedisabler Hateoasobjenesiscachedisabler () {ส่งคืนความเกลียดชังใหม่ใหม่ } @Bean Public FilesystemWatcherFactory FileSystemWatcherFactory () {ส่งคืน FileSySystemWatcherFactory () {@Override Public FilesTremWatcher GetFilesYstemWatcher () {ส่งคืน NewFilesYstemWatcher (); - } private filesystemWatcher newFilesYstemWatcher () {รีสตาร์ทรีสตาร์ท properties = this.properties.getRestart (); FileSystemWatcher Watcher = ใหม่ FilesystemWatcher (จริง, retartProperties.getPollInterval (), retartProperties.getQuietperiod ()); String TriggerFile = RETARTPROPERTIES.GETTRIGGERFILE (); if (stringutils.haslength (triggerfile)) {watcher.setTriggerFilter (TriggerFileFilter ใหม่ (TriggerFile)); } รายการ <file> mutterPaths = retartProperties.getAdditionAlpaths (); สำหรับ (พา ธ ไฟล์: MOTEPATHS) {Watcher.addsourceFolder (path.getAbsoluteFile ()); } return watcher; -การกำหนดค่าทั้งหมดส่งคืนว่าจะลงทะเบียน WatchService ที่เกี่ยวข้อง
แน่นอนเราสามารถลบขวดออกได้
ควรสังเกตว่าเมื่อแสดงความคิดเห็นรหัสนี้คุณต้องกลับมาอีกครั้ง
MVN สะอาด
มิฉะนั้นอาจเป็นไปไม่ได้ที่จะแยกขวดโดยอัตโนมัติ
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น