As armadilhas que eu pisei no estágio inicial (bota de primavera 1.x)
1. Adicione dependências Mavne
<!-Springboot Monitoring-> <pendency> <puerpiD> org.springframework.boot </groupiD> <TarifactId> Spring-boot-starter-actuator
2. Ativar desligamento
Adicione o seguinte arquivo de configuração
#Enable HTTP Acesso de desligamento do ponto final Ponto de extremidade endpoint endpoint endpoint endpoint.shutdown.enabled = true#não precisa verificar o endpoints.shutdown.sensive = false
Você pode ver o seguinte log ao iniciar, o que significa que é bem -sucedido
3. Desligamento elegante
Enviar solicitação de postagem http: // localhost: 8080/desligamento
Se o código de resposta for 404, você pode tentar postar http: // localhost: 8080/atuador/desligamento
Spring Boot 2.0
Se a versão de inicialização da primavera que você estiver usando for 2.x, você descobrirá que essas solicitações de postagem terão resultado de 404.
Aqui está como o tempo de inatividade elegante do Spring Boot 2.0 é implementado.
1. Modifique a classe de inicialização do aplicativo
Contêiner tomcat
@SpringbooTApplicationPublic Classe ShutdownApplication {public static void main (string [] args) {springapplication.run (ShutdowNApplication.class, args); } / *** Usado para aceitar eventos de desligamento* / @Bean public GracefulShutDown GracefulShutDown () {return new GracefulShutDown (); } / ** * Configure o tomcat * * @return * / @Bean public servletwebServerFactory servletContainer () {tomcatServletwebserververFactor tomcat.addconnectorCustomizers (GracefulShutdown ()); retornar Tomcat; } /*** Feche a bota da mola graciosamente. O contêiner deve ser Tomcat */ Classe Privada GracefulShutdown implementa TomCatConnectionCustomizer, ApplicationListener <CextCleSedEvent> {private final Logger Log = LoggerFactory.getLogger (GracefulShutDown.class); conector de conector volátil privado; final privado int waittime = 10; @Override public void personalize (conector conector) {this.connector = Connector; } @Override public void onApplicationEvent (contextClosedEvent contextClosedEvent) {this.connector.pause (); Executor executor = this.connector.getProtocolHandler (). GetExecutor (); if (Instância do Executor do ThreadPoolExector) {Try {ThreadpoolExecutor ThreadPoolExector = (ThreadPoolExector) Executor; threadpoolexecutor.shutdown (); if (! threadpoolExecutor.awaitmining (waittime, timeUnit.Seconds)) {log.warn ("o processo do tomcat não pode terminar em" + waittime + "segundos, tente forçar o final"); }} catch (interruptEdException ex) {thread.currentThread (). interrupt (); }}}}}}}}}}}}Container de fundo (não usado, não é garantido para estar disponível)
@SpringbooTApplicationPublic Classe Application {public static void main (string [] args) {springapplication.run (application.class, args); } / ** * Feche a bota da mola elegantemente * / @Component Public Classe GracefulShutdown implementa ApplicationListener <ContextClosedEvent> {@aUTowired Private GracefulShutDownspad @Autowired Private ServletwebServerApplicationContext Contexto; @Override public void onApplicationEvent (contextClosedEvent contextClosedEvent) {GracefulShutDownWrapper.GetGraceFulShutDownsHandler (). Shutdown (); tente {underlowServletwebServer webServer = (underlowServletwebServer) context.getwebServer (); Campo de campo = webServer.getClass (). GetDecLaredField ("Underlow"); field.setAccessible (true); Underlow Underlow = (Underlow) Field.get (WebServer); List <Ougulow.Listenerinfo> luterinfo = underlow.getListenerinfo (); SOUNDOW.Listenerinfo ouvinte = ouvinteinfo.get (0); ConnectorStatistics ConnectorStatistics = ouvinte.getConnectorStatistics (); while (ConnectorStatistics.getActiveConnections ()> 0) {}} catch (Exceção e) {// Application Shutdown}}} @ComCONEMPONENT Public Classe GracefulShutDownsPrippper implementa o HandlerWrapper {Privatefulshutshutler Gradefulshutshandler; @Override public httphandler wrap (httphandler manipulador) {if (grachfulshutdownHandler == null) {this.GracefulShutDownHandler = new GracefulShutDownHandler (manipulador); } retornar gracyfulshutdownhandler; } public GracefulShutDownHandler getGracefulShutDownsHandler () {return GracefulShutDownHandler; }} @Component @AllargSconstructor Classe pública UlowExtraconfiguration {private final GracefulShutDapper GracefulShutDaper; @Bean Public UnderlowServletWebServerFactory ServletWebServerFactory () {UnderServLetLeBServerVactory Factory = new UnderlowServletWebServerFactory (); Factory.AddDeploymentInfocustomizers (implantingInfo -> implantingInfo.addouterHandlerChainWrapper (GracefulShutDownswrapper); Factory.addbuilderCustomizers (construtor -> construtor.SetServeroption (UnderlowOptions.enable_statistics, true)); fábrica de retorno; }}}2. Use o comando Kill para matar o processo
Use o seguinte comando para matar o processo. Este comando envia um sinal de terminação para um processo.
Mate -15 [PID]
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.