Las trampas que pisé en la etapa inicial (Spring Boot 1.x)
1. Agregar dependencias de Mavne
<
2. Habilitar el cierre
Agregue el siguiente archivo de configuración
#Enable HTTP Acceso del punto final de punto final Punto final Punto final Punto final Punto final Punto final Endpoint.shutdown.enabled = true#No es necesario verificar endpoints.shutdown.sensitive = false
Puede ver el siguiente registro al comenzar, lo que significa que es exitoso
3. Elegante cierre
Enviar solicitud de publicación http: // localhost: 8080/shutdown
Si el código de respuesta es 404, puede probar publicar http: // localhost: 8080/actuator/shutdown
Spring Boot 2.0
Si la versión de arranque de primavera que está utilizando es 2.x, encontrará que estas solicitudes de publicación tendrán un resultado de 404.
Así es como se implementa el tiempo de inactividad de Spring Boot 2.0.
1. Modifique la clase de inicio de la aplicación
Contenedor de tomcat
@SpringBootapplicationPublic Class ShutdownApplication {public static void main (string [] args) {springApplication.run (shutdownApplication.class, args); } / *** Se usa para aceptar eventos de cierre* / @Bean public GracefulShutdown GracefulShutdown () {return New GracefulShutdown (); } / ** * Configurar Tomcat * * @return * / @Bean Public ServletWebServerFactory ServletContainer () {TomCatservletWebServerFactory Tomcat = new TomCatservletWebServerFactory (); tomcat.addconnectorcustomizers (graculshutdown ()); devolver Tomcat; } /*** Cerrar la bota de primavera con gracia. El contenedor debe ser Tomcat */ Private Class GracefulShutDown implementa TomCatConnectorCustomizer, ApplicationListener <contextClosedEvent> {private final logger log = loggerFactory.getLogger (GraceFulShutDown.class); Conector de conector volátil privado; Private final int waittime = 10; @Override public void personalizar (conector conector) {this.connector = conector; } @Override public void onApplicationEvent (contextClosedEvent contextClosedEvent) {this.connector.Pause (); Ejecutor Ejecutor = this.connector.getProTocolHandler (). GetExecutor (); if (instancia del ejecutor de ThreadPoolExecutor) {try {ThreadPoolExeCutor ThreadPoolExeCutor = (ThreadPoolExeCutor) ejecutor; ThreadPoolExecutor.shutdown (); if (! ThreadPoolExeCutor.AwaitTermination (WaitTime, TimeUnit.Seconds)) {log.warn ("El proceso TomCat no puede terminar en" + waittime + "segundos, intente forzar fin"); }} capt (interruptedException ex) {thread.currentThread (). interrupt (); }}}}}}}}}}}}Entrenador de Untow (no utilizado, no garantizado que esté disponible)
@SpringBootApplicationPublic Aplolation {public static void main (string [] args) {springApplication.run (application.class, args); } / ** * Cerrar el arranque de primavera elegantemente * / @Component public class GracefulShutdown implementa ApplicationListener <CuenceClosedEvent> {@AUTOWIREDEDRIREDREDREDired GracefulShutdownWrapper GracefulShutdownWrapper; @AUTOWired private ServletWebServerApplicationContext Context; @Override public void onApplicationEvent (contextCleedEvent contextClosedEvent) {GracefulShutdownWrapper.getGraceFulShutDownHandler (). Shutdown (); Pruebe {UndardOsVervletWebServer WebServer = (UndowerservletWebServer) context.getWebServer (); Campo campo = webserver.getClass (). GetDeclaredfield ("untowow"); campo.setAccessible (verdadero); Unrowrow Unrow = (Untow) Field.get (WebServer); Lista <Undowow.ListenerInfo> LISTEERINFO = Unrowow.getListenerInfo (); Untow.ListenerInfo Listener = LOYERINFO.GET (0); ConnectorStatistics conectorStatistics = oyente.getConnectorStatistics (); while (conectorStatistics.getActiveConnections ()> 0) {}} Catch (Exception e) {// Application Sutowndown}}} @Component Class pública GracefulShutdownWrapper implementa HandlerWrapper {private GraceFullShutdownHandler GraceFullShutdownler; @Override public httphandler wrap (httphandler handler) {if (graculShutdownHandler == null) {this.GraceFulShutdownHandler = new GracefulShutdownHandler (Handler); } return GracefulShutdownHandler; } public GracefulShutdownHandler getGraCeFulShutdownHandler () {return GracefulShutdownHandler; }} @Component @AllargSconstructor Class pública UnruplewExtraconfiguration {Private Final GracefulShutdownWrapper GracefulShutdownWrapper; @Bean Public UnlipeServeServletWebServerFactory ServletWebSerVerFactory () {UndureServletWebSerVerFactory factory = new UndowServletWebServerFactory (); Factory.AddDePloyMentInfocustomizers (implementmentInfo -> implementmentInfo.addouterhandlerchainwrapper (GracefulShutdownwrapper)); Factory.AddBuilderCustomizers (Builder -> Builder.SetServerPtion (UnderWoWOptions.enable_statistics, true)); Return Factory; }}}2. Use el comando matar para matar el proceso
Use el siguiente comando para matar el proceso. Este comando envía una señal de terminación a un proceso.
matar -15 [pid]
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.