zoukankan      html  css  js  c++  java
  • 服务器spring boot版本,平滑升级

    1、在pom文件中加入:

    <!--平滑升级包 开始 -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--平滑升级包 结束 -->

    2、在spring配置文件中:

    #平滑关闭配置开始
    management.endpoint.shutdown.enabled=true
    management.endpoints.web.exposure.include=*
    #平滑关闭配置结束

    3、定制controller

    import org.apache.catalina.connector.Connector;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.event.ContextClosedEvent;

    import java.util.concurrent.Executor;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;

    /**
    * 定制的 Connector(tomcat处理器)
    *
    */
    @Configuration
    public class CustomShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());

    private static final int TIMEOUT = 30;

    private volatile Connector connector;

    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
    this.connector.pause();
    Executor executor = this.connector.getProtocolHandler().getExecutor();
    if (executor instanceof ThreadPoolExecutor) {
    try {
    logger.warn("WEB 应用准备关闭");
    ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;
    threadPoolExecutor.shutdown();
    if (!threadPoolExecutor.awaitTermination(TIMEOUT, TimeUnit.SECONDS)) {
    logger.warn("WEB 应用等待关闭超过最大时长 " + TIMEOUT + " 秒,将进行强制关闭!");
    threadPoolExecutor.shutdownNow();
    if (!threadPoolExecutor.awaitTermination(TIMEOUT, TimeUnit.SECONDS)) {
    logger.error("WEB 应用关闭失败!");
    }
    }
    } catch (InterruptedException ex) {
    Thread.currentThread().interrupt();
    }
    }
    }

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

    4、在spring启动类中加入

    @Bean
    public CustomShutdown customShutdown() {
    return new CustomShutdown();
    }

    /**
    * 将定制的添加到tomcat
    * @param customShutdown
    * @return
    */
    @Bean
    public ConfigurableServletWebServerFactory webServerFactory(CustomShutdown customShutdown) {
    TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory();
    tomcatServletWebServerFactory.addConnectorCustomizers(customShutdown);
    return tomcatServletWebServerFactory;
    }

    完成

  • 相关阅读:
    Datax streamreader json测试样例
    dbeaver 连接 elasticsearch 记录
    灾害链开发记录资料汇总
    mxgraph
    drawio www.diagrams.net 画图应用程序开发过程资料汇总
    neo4j学习记录
    GraphVis 图可视化分析组件
    D3学习记录
    Kubernetes K8S之固定节点nodeName和nodeSelector调度详解
    记一次性能优化,单台4核8G机器支撑5万QPS
  • 原文地址:https://www.cnblogs.com/xwjBlog/p/11556121.html
Copyright © 2011-2022 走看看