วิธีนี้เหมาะสำหรับโครงการขนาดเล็กเช่นเซิร์ฟเวอร์เพียงหนึ่งหรือสองเซิร์ฟเวอร์เท่านั้นและไฟล์การกำหนดค่าสามารถแก้ไขได้โดยตรง ตัวอย่างเช่น Spring MVC ถูกปรับใช้ในรูปแบบของแพ็คเกจสงครามและไฟล์การกำหนดค่าในทรัพยากรสามารถแก้ไขได้โดยตรง หากเป็นโครงการสปริงบูตและคุณต้องการใช้วิธีนี้คุณจะต้องอ้างถึงไฟล์ที่แก้ไขได้ภายนอกเช่นไดเรกทอรีคงที่เนื่องจากการบูตสปริงส่วนใหญ่จะถูกปรับใช้ในแพ็คเกจ JAR และไฟล์การกำหนดค่าที่คุณป้อนไม่สามารถแก้ไขได้โดยตรง หากเป็นโครงการที่ค่อนข้างใหญ่ควรใช้ศูนย์การกำหนดค่าเช่น Apollo, กงสุล ฯลฯ ของ CTRIP ฯลฯ
วิธีดั้งเดิม
วิธีดั้งเดิมหมายถึงการบรรจุใหม่และปล่อยเซิร์ฟเวอร์ทุกครั้งที่คุณต้องการแก้ไขการกำหนดค่า
สมมติว่าเราใช้ Spring MVC เพื่อพัฒนาและหลังจากการพัฒนาเสร็จสมบูรณ์เราจะจัดทำแพ็คเกจสงครามและปรับใช้กับ Tomcat หากเราแก้ไขที่อยู่อินเตอร์เฟส SMS ในเวลานี้
เราต้องทำสิ่งต่อไปนี้:
1. เปิดไฟล์การกำหนดค่าและแก้ไขข้อมูลการกำหนดค่า
2. คอมไพล์และแพ็คเกจ;
3. หยุด Tomcat และลบไดเรกทอรีโครงการเก่า;
4. ใส่แพ็คเกจสงครามใหม่ใน WebApps และเริ่ม Tomcat
แน่นอนคุณสามารถค้นหาไฟล์การกำหนดค่าของโครงการนี้โดยตรงใน Tomcat จากนั้นแก้ไข แต่คุณต้องรีสตาร์ท Tomcat
หากคุณเพียงแค่ทำการพัฒนาหรือทดสอบก็เป็นที่ยอมรับได้อย่างแน่นอนว่าจะเสียเวลาเล็กน้อย ดังนั้นฉันไม่ต้องการเสียเวลาหรือรีสตาร์ท Tomcat มีวิธีใดบ้าง นี่คือการเปลี่ยนบทความนี้เพื่อแนะนำ
วิธีการรับชม
Java จัดเตรียมอินเทอร์เฟซ WatchService ซึ่งใช้การตรวจสอบไฟล์ของระบบปฏิบัติการเพื่อตรวจสอบไดเรกทอรีและไฟล์ เมื่อการเปลี่ยนแปลงวัตถุที่ถูกตรวจสอบจะมีการแจ้งเตือนสัญญาณเพื่อให้สามารถค้นพบการเปลี่ยนแปลงได้อย่างมีประสิทธิภาพ
หลักการทั่วไปของวิธีการนี้คือ: ก่อนอื่นจอมอนิเตอร์ใหม่ (WatchService) ตามระบบปฏิบัติการจากนั้นเลือกไดเรกทอรีหรือไฟล์ที่มีการตรวจสอบไฟล์การกำหนดค่าจากนั้นสมัครรับเหตุการณ์ที่จะตรวจสอบเช่นการสร้างการลบการแก้ไขและการลงทะเบียนจอภาพ เมื่อเหตุการณ์ที่สอดคล้องกับเหตุการณ์ที่สมัครสมาชิกจะถูกเรียกใช้ตรรกะที่สอดคล้องกันจะถูกดำเนินการ
เริ่มต้นด้วยรหัสกันเถอะ นี่คือในโครงการ MVC ฤดูใบไม้ผลิและมีการตรวจสอบไดเรกทอรีทรัพยากร
@RepositoryPublic คลาส configwatcher {ส่วนตัว logger สุดท้ายคงที่ logger = loggerFactory.getLogger (configwatcher.class); Watchservice Watchservice ส่วนตัว @PostConstruct โมฆะสาธารณะ init () {logger.info ("เริ่มการตรวจสอบไฟล์การกำหนดค่า"); ลอง {watchService = filesystems.getDefault (). newWatchService (); url url = configwatcher.class.getResource ("/"); เส้นทางพา ธ = paths.get (url.touri ()); path.register (WatchService, StandardWatchEventKinds.entry_modify, StandardWatchEventKinds.entry_Create); } catch (Exception e1) {e1.printstacktrace (); } / *** เริ่มเธรดการตรวจสอบ* / เธรด watchThread = เธรดใหม่ (ใหม่ watchThread ()); watchThread.setdaemon (จริง); watchThread.start (); / ** ลงทะเบียนเพื่อปิด hook*/ thread hook = เธรดใหม่ (ใหม่ runnable () {@Override โมฆะสาธารณะเรียกใช้ () {ลอง {watchService.close ();} catch (ioexception e) {e.printstacktrace ();}}}); runtime.getRuntime (). addshutdownhook (hook); } คลาสสาธารณะ WatchThread ใช้งาน Runnable {@Override Public Public Void Run () {ในขณะที่ (จริง) {ลอง {// พยายามที่จะได้รับการเปลี่ยนแปลงในพูลการตรวจสอบหากไม่รอ WatchKey WatchKey = WatchService.take (); สำหรับ (watchEvent <?> เหตุการณ์: watchkey.pollevents ()) {string editFileName = event.context (). toString (); logger.info (editfilename); /*** การกำหนดค่าการโหลดซ้ำ*/} watchKey.reset (); // ในการตรวจสอบให้เสร็จสมบูรณ์คุณต้องรีเซ็ตจอภาพหนึ่งครั้ง} catch (Exception e) {E.printStackTrace (); -รหัสนั้นง่ายมากและคุณสามารถเข้าใจได้อย่างรวดเร็ว เมื่อโครงการเริ่มต้นใช้ FileSystems.getDefault (). NewWatchService () เพื่อสร้าง WatchService ซึ่งขึ้นอยู่กับระบบปฏิบัติการ จากนั้นรับ URL ของไดเรกทอรีทรัพยากรและรับเส้นทางจากนั้นโทรไปที่วิธีการลงทะเบียนของวัตถุเส้นทางลงทะเบียนจอภาพและสมัครรับการแก้ไขและสร้างเหตุการณ์ เหตุการณ์ถูกกำหนดในคลาส StandardWatchEventKinds และมีสี่ประเภท:
1. StandardWatchEventKinds#overflow
2. StandardWatchEventKinds#entry_create
3. StandardWatchEventKinds#entry_delete
4. StandardWatchEventKinds#entry_modify
จากนั้นเธรด WatchThread จะเริ่มแยกต่างหากเพื่อจัดการกับการเปลี่ยนแปลงตรรกะและวิธีการใช้ () จะถูกเรียกในขณะที่ไม่มีการวนซ้ำจนกว่าจะมีการเปลี่ยนแปลงเกิดขึ้น เมื่อไฟล์การกำหนดค่าเราตรวจสอบการเปลี่ยนแปลงตรรกะของเราจะถูกเรียกให้โหลดการกำหนดค่าซ้ำ นอกจากนี้หลังจากการเปลี่ยนแปลงแต่ละครั้งจะต้องมีการเรียกใช้วิธีการ watchkey.reset () เพื่อรีเซ็ตจอภาพ
ในที่สุดคุณต้องลงทะเบียนเบ็ดและคุณสามารถปิดจอภาพเมื่อปิด JVM
ด้วยวิธีนี้เมื่อเรามีการเปลี่ยนแปลงการกำหนดค่าบางอย่างเราสามารถไปที่ Tomcat โดยตรงเพื่อแก้ไขไฟล์การกำหนดค่าและอาจมีผลโดยไม่รีสตาร์ท
บทความนี้ส่วนใหญ่แนะนำวิธีนี้ซึ่งกล่าวถึงข้างต้น วิธีนี้เหมาะสำหรับโครงการที่ง่ายมากเท่านั้น สำหรับโครงการขนาดใหญ่จำเป็นต้องใช้วิธีการขั้นสูงมากขึ้น
วิธีกำหนดค่าศูนย์
เมื่อความซับซ้อนของโครงการสูงขึ้นการเปลี่ยนแปลงการกำหนดค่าจะมีผลในเวลาเรียลไทม์การเปิดตัวสีเทาแบ่งออกเป็นสภาพแวดล้อมการกำหนดค่าการจัดการคลัสเตอร์และการอนุญาตที่สมบูรณ์และกลไกการตรวจสอบอาจกลายเป็นปัญหาที่ต้องพิจารณาในโครงการ ในเวลานี้การพึ่งพาไฟล์การกำหนดค่าเพียงอย่างเดียวจะดูเหมือนไร้ความสามารถ
ปัจจุบันศูนย์การกำหนดค่าที่ใช้กันมากที่สุด ได้แก่ ETCD, Zookeeper, Disconf, Apollo ฯลฯ Disconf และ Apollo นั้นทั้งคู่พร้อมใช้งานพร้อมฟังก์ชั่นที่สมบูรณ์และสนับสนุน UI และ ETCD และ Zookeeper ต้องการการพัฒนาที่กำหนดเอง
นักเรียนสามารถเลือกตามความต้องการของพวกเขาและเนื้อหาที่มีรายละเอียดเพิ่มเติมสามารถค้นหาและปฏิบัติด้วยตนเอง