ข้อผิดพลาดที่ฉันก้าวเข้ามาในระยะแรก (Spring Boot 1.x)
1. เพิ่มการพึ่งพา mavne
<!-การตรวจสอบ SpringBoot-> <การพึ่งพา> <GroupId> org.springframework.boot </roupId> <ratifactid> Spring-Boot-Starter-actuator </artifactid>
2. เปิดใช้งานการปิดเครื่อง
เพิ่มไฟล์การกำหนดค่าต่อไปนี้
#ENABLE HTTP การเข้าถึงการปิดปลายจุดสิ้นสุดจุดสิ้นสุดจุดสิ้นสุดจุดสิ้นสุดจุดปลายจุดสิ้นสุดจุดสิ้นสุดจุดสิ้นสุดจุดสิ้นสุดของจุดสิ้นสุด.
คุณสามารถดูบันทึกต่อไปนี้เมื่อเริ่มต้นซึ่งหมายความว่าจะสำเร็จ
3. การปิดที่สง่างาม
ส่งคำขอโพสต์ http: // localhost: 8080/shutdown
หากรหัสตอบกลับคือ 404 คุณสามารถลองโพสต์ http: // localhost: 8080/actuator/shutdown
Spring Boot 2.0
หากสปริงบูตเวอร์ชันที่คุณใช้คือ 2.x คุณจะพบว่าคำขอโพสต์เหล่านี้จะมีผลลัพธ์ 404
นี่คือวิธีการใช้งาน Spring Boot 2.0 Elegant Downtime
1. แก้ไขคลาสเริ่มต้นแอปพลิเคชัน
คอนเทนเนอร์ Tomcat
@springbootapplicationPublic คลาส shutdownapplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (shutdownapplication.class, args); } / *** ใช้ในการยอมรับเหตุการณ์ปิดระบบ* / @bean สาธารณะ GRANTFULSHUTDOWN GREANTFULSHUTDOWN () {ส่งคืนความสง่างามใหม่ (); } / ** * กำหนดค่า tomcat * * @return * / @bean สาธารณะ servletwebserverfactory servletContainer () {tomcatservletwebserverfactory tomcat = ใหม่ tomcatservletwebserverfactory (); tomcat.addconnectorcustomizers (Gracefulshutdown ()); กลับ Tomcat; } /*** ปิดการบูตสปริงอย่างสง่างาม คอนเทนเนอร์จะต้องเป็น tomcat */ คลาสส่วนตัว Gracefulshutdown ใช้ tomcatconnectorcustomizer, applicationListener <contextclosedEvent> {logger สุดท้าย logger สุดท้าย = loggerFactory.getLogger (Gracefulshutdown.class); ขั้วต่อตัวเชื่อมต่อที่ผันผวนส่วนตัว; ส่วนตัวสุดท้าย int waittime = 10; @Override โมฆะสาธารณะปรับแต่ง (ตัวเชื่อมต่อตัวเชื่อมต่อ) {this.connector = ตัวเชื่อมต่อ; } @Override โมฆะสาธารณะ onApplicationEvent (ContextClosedEvent ContextClosedEvent) {this.connector.pause (); Executor Executor = this.connector.getProtocolHandler (). getExecutor (); if (อินสแตนซ์ Executor ของ ThreadPoolexecutor) {ลอง {threadPoolexecutor threadPoolexecutor = (threadPoolexecutor) Executor; Threadpoolexecutor.shutdown (); if (! threadpoolexecutor.awaittermination (waittime, timeunit.seconds)) {log.warn ("กระบวนการ tomcat ไม่สามารถจบลงใน" + waittime + "วินาทีพยายามบังคับให้จบ"); }} catch (interruptedException ex) {thread.currentthread (). interrupt (); -คอนเทนเนอร์ Undertow (ไม่ได้ใช้ไม่รับประกันว่าจะพร้อมใช้งาน)
@springbootapplicationpublic คลาสแอปพลิเคชัน {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (application.class, args); } / ** * ปิดการบูตฤดูใบไม้ผลิอย่างสง่างาม * / @component คลาสสาธารณะ GRANTSFULSHUTDOWN ใช้ ApplicationListener <ContextClosedEvent> {@autowired Private GRATEFULSHUTDOWNWRAPPER GREASTFULSHUTDOWNWRAPPER; @AutoWired Private ServletWebserverApplicationContext บริบท; @Override โมฆะสาธารณะ onapplicationEvent (บริบท contextclosedclosedEvent) {Gracefulshutdownwrapper.getGracefulshutdownhandler (). shutdown (); ลอง {undertowservletwebserver webserver = (undertowservletwebserver) บริบท. getWebserver (); Field Field = WebServer.getClass (). getDeclaredField ("undertow"); field.setAccessible (จริง); undertow undertow = (undertow) field.get (เว็บเซิร์ฟเวอร์); รายการ <undertow.listenerInfo> listenerInfo = undertow.getListenerInfo (); undertow.listenerInfo Listener = ListenerInfo.get (0); ConnectorStatistics ConnectorStatistics = Listener.getConnectorStatistics (); ในขณะที่ (ConnectorStatistics.getActiveConnections ()> 0) {}} catch (Exception e) {// แอปพลิเคชันปิดตัวลง}}} @Component คลาสสาธารณะ Gracefulshutdownwrapper ใช้ handlerWrapper {ส่วนตัว @Override public httphandler wrap (httphandler handler) {if (greyfulshutdownhandler == null) {this.gracefulshutdownhandler = new Gracefulshutdownhandler (Handler); } ส่งคืน GRANTREALSHUTDOWNHANDLER; } สาธารณะ Greatfulshutdownhandler getGracefulshutdownhandler () {return greyfulshutdownhandler; }} @component @AllArgSconstructor ชั้นเรียนสาธารณะ undertowExtraconFiguration {ส่วนตัวรอบชิงชนะเลิศ Private GracefulShutDownWrapper Gracefulshutdownwrapper; @bean สาธารณะ undertowservletwebserverfactory servletwebserverfactory () {undertowservletwebserverfactory โรงงาน = ใหม่ undertowservletwebserverfactory (); Factory.adddeploymentInfocustomizers (DeploymentInfo -> การปรับใช้งาน Info.addouterhandlerchainwrapper (Gracefulshutdownwrapper)); Factory.AddBuilderCustomizers (Builder -> Builder.SetServerOption (undertowoptions.enable_statistics, TRUE)); โรงงานกลับมา; -2. ใช้คำสั่งฆ่าเพื่อฆ่ากระบวนการ
ใช้คำสั่งต่อไปนี้เพื่อฆ่ากระบวนการ คำสั่งนี้จะส่งสัญญาณการเลิกจ้างไปยังกระบวนการ
ฆ่า -15 [PID]
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น