Springboot 1.5 tomcat正常关机设置

时间:2019-09-03 01:32:16

标签: java spring-boot tomcat shutdown

我英语不好,所以希望你能理解。

在Spring Boot上使用tomcat时, connector.pause()似乎无法按我的意愿工作。 我想要的是一种情况,当请求到达服务器时,kill会立即开始引发错误。

因此,我直接触摸了<​​strong> protocolHandler ,如下所示。当我这样做时,我确认它可以按我的意愿工作。但是,我想征求您的意见,此代码将导致副作用。

请发表评论。

public class GracefulShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {

  private volatile  Connector connector;
  private static final String protocolHandlerClassName = "org.apache.coyote.http11.Http11NioProtocol";

  @Override
  public void customize(Connector connector) {
    this.connector = connector;
  }

  @Override
  public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {

//    this.connector.pause();
    this.protocolHandlerClose();

    Executor executor = this.connector.getProtocolHandler().getExecutor();

    if (executor instanceof ThreadPoolExecutor) {
      ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;

      threadPoolExecutor.shutdown();

      try {
        if (!threadPoolExecutor.awaitTermination(60, TimeUnit.SECONDS)) {
          threadPoolExecutor.shutdownNow();
        }
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }

  private void protocolHandlerClose() {
    try {
      Class<?> clazz = Class.forName(protocolHandlerClassName);
      ProtocolHandler p = (ProtocolHandler) clazz.getConstructor().newInstance();
      p.pause();

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

0 个答案:

没有答案
相关问题