Jebakan yang saya ikuti pada tahap awal (Spring Boot 1.x)
1. Tambahkan dependensi Mavne
<!-Pemantauan Springboot-> <dependency> <GroupId> org.springframework.boot </groupid> <ArtifactId> Spring-boot-starter-aktuator </stifactid> </gandendency>
2. Aktifkan shutdown
Tambahkan file konfigurasi berikut
#Enable HTTP Akses shutdown titik akhir titik akhir titik akhir titik akhir titik akhir titik akhir.shutdown.enabled = true#tidak perlu memverifikasi endpoints.shutdown.sensitive = false
Anda dapat melihat log berikut saat memulai, yang berarti berhasil
3. Shutdown yang elegan
Kirim Posting Permintaan http: // localhost: 8080/shutdown
Jika kode responsnya adalah 404, Anda dapat mencoba memposting http: // localhost: 8080/aktuator/shutdown
Spring Boot 2.0
Jika versi Spring Boot yang Anda gunakan adalah 2.x, Anda akan menemukan bahwa permintaan posting ini akan memiliki hasil 404.
Inilah cara Downtime Spring Boot 2.0 Elegan diimplementasikan.
1. Ubah kelas startup aplikasi
Wadah Tomcat
@SpringbootApplicationPublic class shutdownapplication {public static void main (string [] args) {springApplication.run (shutdownapplication.class, args); } / *** Digunakan untuk menerima acara shutdown* / @bean Public Gracefulshutdown Gracefulshutdown () {return new Gracefulshutdown (); } / ** * Konfigurasikan tomcat * * @return * / @bean servletwebserverfactory servletcontainer () {tomcatserverwebserverfactory tomcat = tomcatserverwebserverfactory (); tomcat.addconnectorcustomizers (gracefulshutdown ()); mengembalikan Tomcat; } /*** Tutup boot musim semi dengan anggun. Wadah harus tomcat */ kelas privat GracefulShutdown mengimplementasikan TomCatConnectorCustomizer, ApplicationListener <ContextClosedEvent> {private Final Logger Log = LoggerFactory.getLogger (gracefulshutdown.class); konektor konektor volatil swasta; private final int waittime = 10; @Override public void customize (konektor konektor) {this.connector = connector; } @Override public void onApplicationEvent (ContextClosedEvent ContextClosedEvent) {this.connector.Pause (); Executor Executor = this.connector.getProtocolHandler (). GetExecutor (); if (executor instance threadPoolExecutor) {coba {threadPoolExecutor threadPoolExecutor = (threadPoolExecutor) Executor; threadpoolexecutor.shutdown (); if (! ThreadPoolExecutor.AwaitTermination (WaitTime, TimeUnit.Seconds)) {log.warn ("Proses Tomcat tidak dapat berakhir dengan" + WaitTime + "detik, cobalah untuk memaksa akhir"); }} catch (InterruptedException ex) {thread.currentThread (). Interrupt (); }}}}}}}}}}}}Wadah undertow (tidak digunakan, tidak dijamin akan tersedia)
@SpringbootApplicationPublic Class Application {public static void main (string [] args) {springApplication.run (application.class, args); } / ** * Tutup boot musim semi dengan elegan * / @component kelas publik GracefulShutdown mengimplementasikan ApplicationListener <contextClosedEvent> {@Autowired private gracefulshutdownWrapper GracefulshutDownWrapper; @Autowired Private ServletWebServerApplicationContext konteks; @Override public void onApplicationEvent (ContextClosedEvent ContextClosedEvent) {GracefulshutdownWrapper.getGracefulShutdownHandler (). Shutdown (); Coba {UndertowServletWebServer WebServer = (UndertowServletWebserver) Context.getWebServer (); Bidang bidang = WebServer.getClass (). GetDeclaredField ("Undertow"); field.setAccessible (true); Undertow Undertow = (Undertow) Field.get (WebServer); Daftar <Akem. Undertow.listenerinfo listener = listenerInfo.get (0); ConnectorStatistics ConnectorStatistics = listener.getConnectorStatistics (); while (connectorstatistics.getActiveConnections ()> 0) {}} catch (Exception e) {// Application Shutdown}}} @Component kelas publik GracefulshutDownWrapper mengimplementasikan HandlerWrapper {private gracefulshutdownhandler gracefuldownhandler; @Override public httphandler wrap (htttphandler handler) {if (gracefulshutdownHandler == null) {this.gracefulshutdownHandler = new GracefulshutdownHandler (handler); } return gracefulshutdownhandler; } public gracefulshutdownhandler getGracefulshutdownHandler () {return gracefulshutdownHandler; }} @Component @allArgsconstructor Public Class Public UndertowExtraconfiguration {private final gracefulshutdownwrapper GracefulshutdownWrapper; @Bean public undertowserverwebserverfactory servletwebserverfactory () {UndertowServletWebServerFactory factory = New UndertowServletWebServerFactory (); factory.adddeploymentInfocustomizers (DeploymentInfo -> DeploymentInfo.AddouterHandlerChainwrapper (GracefulshutdownWrapper)); factory.addbuildercustomizers (builder -> builder.setserveroption (undertowoptions.enable_statistics, true)); Pabrik Kembali; }}}2. Gunakan perintah membunuh untuk membunuh proses
Gunakan perintah berikut untuk membunuh proses. Perintah ini mengirimkan sinyal terminasi ke suatu proses.
Bunuh -15 [PID]
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.