Die Fallstricke, die ich in der frühen Bühne betrat (Spring Boot 1.x)
1. Fügen Sie Mavne -Abhängigkeiten hinzu
<!-Springboot Monitoring-> <De vor Ort> <gruppe> org.springframework.boot </Groupid> <artifactId> Spring-Boot-Starter-Actuator </artifactid> </abhängig>
2. Aktivieren Sie das Abschalten
Fügen Sie die folgende Konfigurationsdatei hinzu
#Enable HTTP -Zugriff des Shutdown -Endpunkts Endpunkt Endpoint Endpoint Endpoint Endpoint Endpoint.shutdown.Enabled = true#NICHT müssen endpoints.shutdown.sensitive = false überprüft werden
Sie können das folgende Protokoll beim Starten sehen, was bedeutet, dass es erfolgreich ist
3.. Elegante Abschaltung
Senden Sie Post Anfrage http: // localhost: 8080/stilldown
Wenn der Antwortcode 404 ist, können Sie versuchen, http: // localhost: 8080/actuator/stilldown zu posten
Federschuh 2.0
Wenn die von Ihnen verwendete Spring -Boot -Version 2.x ist, werden Sie feststellen, dass diese Postanfragen ein Ergebnis von 404 haben.
So wird die elegante Ausfallzeit von Spring Boot 2.0 implementiert.
1. Ändern Sie die Anwendungsstartklasse
Tomcat Container
@SpringbootApplicationPublic Class ShortdownApplication {public static void main (String [] args) {SpringApplication.run (stilldownApplication.class, args); } / *** akzeptierte Shutdown -Ereignisse* / @Bean public mecurfulShutdown mecuringShutdown () {return New mecefulShutdown (); } / ** * tomcat * * @return * / @bean public servletWebserverFactory ServletContainer () {tomcatServletWebserverfactory tomcat = new tomcatervletweberverfactory (); tomcat.addConnectorCustomizers (mecurfulShutdown ()); Tomcat zurückgeben; } /*** Federschuh anmutig schließen. Der Container muss Tomcat */ private class glearyfulshutdown implementieren tomcatConnectorCustomizer, applicationListener <ContextcLoseDevent> {private leges logger logger = loggerfactory.getLogger (gracefulShutdown.class); privater flüchtiger Stecker; private endgültige int waittime = 10; @Override public void Customize (Connector Connector) {this.connector = Connector; } @Override public void OnapplicationEvent (kontextklOateneDeVent contextledEventEvent) {this.connector.pause (); Executor Executor = this.connector.getProtocolHandler (). GetExecutor (); if (Executor -Instanz von ThrevOolexecutor) {try {threadpoolexecutor threadpoolexecutor = (ThreadPoolexecutor) Executor; threadpoolexecutor.shutdown (); if (! threadpoolexecutor.aWaittermination (WaitTime, TimeUnit.Seconds)) {log.warn ("Tomcat -Prozess kann nicht in" + WaitTime + "enden, versuchen Sie das Ende zu erzwingen"); }} catch (InterruptedException ex) {thread.currentThread (). interrupt (); }}}}}}}}}}}}}STOW Container (nicht verwendet, nicht garantiert verfügbar)
@SpringbootApplicationPublic Class Application {public static void main (String [] args) {SpringApplication.run (application.class, args); } / ** * ELEGEND STOFT ELEGANTENT * / @COMPONENT PUBLIC CLASS GRACEFULSHUTDOWN UMPURTSIRELTENER <CONEXTECLOSOSEDEVENT> {@AUTOWRED PRIVATION GRACEFULSHUPFRAPPER GRACEFUFUGHUTHUTHUTHUMPERWRAPPER; @Autowired private servletWebServerApplicationContext -Kontext; @Override public void OnapplicationEvent (kontextklockener kontextklockener Event) {gracefulShutdownwrapper.getGracefulShutdownHandler (). try {adperServletWebServer webserver = (adperServletWebserver) context.getWebserver (); Field field = webserver.getClass (). GetDeclaredfield ("terms"); field.setAccessible (true); Termpertow = (term) field.get (Webserver); Liste <terum.Listenerinfo> listenerInfo = terum.getListenerinfo (); Terum.Listenerinfo louser = louseerInfo.get (0); ConnectorStatistics ConnectorStatistics = Listener.getConnectorStatistics (); while (ConnectorStatistics.getActiveConnections ()> 0) {}} catch (Ausnahme E) {// Anwendung Shutdown}}} @Component Public Class GracefulShutdownWrapper implementiert Handlerwrapper {private gleardfullshutdownhandler grazefulShutdownHandler; @Override public httphandler Wrap (httphandler -Handler) {if (mecefulShutdownHandler == null) {this.gracefulShutdownHandler = new mecefulShutdownHandler (Handler); } return gracefulShutdownHandler; } public gracefulShutdownHandler getGracefulShutdownHandler () {return gracefulShutdownHandler; }} @Component @AllargSconstructor Public Class Underextraconfiguration {private endgültige GracefulShutdownWrapper GracefulShutdownWrapper; @Bean public adperServletWeberverFactory servletWebserverFactory () {terumServletWeberverfactory factory factory.addDeploymentInfocustomizer (DeploymentInfo -> DeploymentInfo.AddouterHandlerChainWrapper (GracefulShutdownWrapper)); factory.addbuilderCustomizer (Builder -> builder.setServeroption (termessoptions.enable_statistics, true)); Rückgabefabrik; }}}2. Verwenden Sie den Befehl Kill, um den Prozess zu töten
Verwenden Sie den folgenden Befehl, um den Prozess abzutöten. Dieser Befehl sendet ein Kündigungssignal an einen Prozess.
töten -15 [PID]
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.