SpringCloud:优雅关机

目录

一、SpringCloud 扩展

二、TomcatConnectorCustomizer介绍

三、ContextClosedEvent介绍

四、优雅关机原理


提示:以下是本篇文章正文内容,下面案例可供参考

一、SpringCloud 扩展

SpringCloud提供了一种扩展,用于在应用结束运行之前,执行该接口的所有实现

必须实现接口:TomcatConnectorCustomizer

使用方法如下:

@Bean
public GracefulShutdown gracefulShutdown() {
    return new GracefulShutdown();
}

@Bean
public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
    log.info("开始调用 TomcatServletWebServerFactory,添加自定义的优雅关机方法 ");
    tomcat.addConnectorCustomizers(gracefulShutdown());
    return tomcat;
}



private class GracefulShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {
    private volatile Connector connector;
    private final int waitTime = 30;
    @Override
    public void customize(Connector connector) {
        this.connector = connector;
    }
    @Override
    public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
        log.info("优雅关机进行中, 连接停止,并关闭连接池。" + new Date());
        this.connector.pause();
        Executor executor = this.connector.getProtocolHandler().getExecutor();
        if (executor instanceof ThreadPoolExecutor) {
            try {
                ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;
                threadPoolExecutor.shutdown();
                if (!threadPoolExecutor.awaitTermination(waitTime, TimeUnit.SECONDS)) {
                    log.warn("Tomcat thread pool did not shut down gracefully within " + waitTime + " seconds. Proceeding with forceful shutdown");
                }
            } catch (InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
        }
        log.info("已经完成关机。" + new Date());
    }
}

二、TomcatConnectorCustomizer介绍

TomcatConnectorCustomizer接口是Spring Boot中的一个接口,主要用于定制Tomcat连接器的行为

通过实现TomcatConnectorCustomizer接口并重写其customize方法来修改Tomcat连接器的配置。例如,你可以设置最大线程数、最小空闲线程数等参数。

三、ContextClosedEvent介绍

ContextClosedEvent是Spring Framework中的一个事件类,用于表示Web应用程序上下文关闭的事件。当Web应用程序上下文关闭时,会触发该事件。

该事件通常与Spring的ApplicationListener接口一起使用,以便在Web应用程序上下文关闭时执行特定的操作。例如,你可以在Web应用程序关闭时清理资源、释放连接池等。

ContextClosedEvent是一个非常重要的事件类,可以帮助你在Web应用程序上下文关闭时执行必要的清理工作。

四、优雅关机原理

1.注册事件、监听事件

2.应用关闭,触发程序上下文关闭,触发关闭事件

3.执行事件方法实现逻辑,调用线程池关闭方法,不再接收新的任务,待进行中的任务执行完,关闭线程池,关闭上下文,关闭连接

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值