12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package com.medipath.cif.configurer.springbootshutdown;
- /**
- * @Author: lxk
- * @Date: 2019/11/29 15:08
- * @Version 1.0
- */
- import io.undertow.Undertow;
- import io.undertow.server.ConnectorStatistics;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.web.embedded.undertow.UndertowServletWebServer;
- import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext;
- import org.springframework.context.ApplicationListener;
- import org.springframework.context.event.ContextClosedEvent;
- import org.springframework.stereotype.Component;
- import java.lang.reflect.Field;
- import java.util.List;
- /**
- *
- * 优雅关闭 Spring Boot undertow
- */
- @Component
- public class GracefulShutdownUndertow implements ApplicationListener<ContextClosedEvent> {
- @Autowired
- private GracefulShutdownUndertowWrapper gracefulShutdownUndertowWrapper;
- @Autowired(required = false)
- private ServletWebServerApplicationContext context;
- @Override
- public void onApplicationEvent(ContextClosedEvent contextClosedEvent){
- gracefulShutdownUndertowWrapper.getGracefulShutdownHandler().shutdown();
- try {
- UndertowServletWebServer webServer = (UndertowServletWebServer)context.getWebServer();
- Field field = webServer.getClass().getDeclaredField("undertow");
- field.setAccessible(true);
- Undertow undertow = (Undertow) field.get(webServer);
- List<Undertow.ListenerInfo> listenerInfo = undertow.getListenerInfo();
- Undertow.ListenerInfo listener = listenerInfo.get(0);
- ConnectorStatistics connectorStatistics = listener.getConnectorStatistics();
- while (connectorStatistics.getActiveConnections() > 0){}
- }catch (Exception e){
- // Application Shutdown
- }
- }
- }
|