• 服务器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;
    }

    完成

  • 相关阅读:
    使用反射获取对象的步骤
    金融IT的算法要求
    Java编译与反编译命令记录
    常用搜索博客/网站
    Java核心-03 谈谈final、finally、 finalize有什么不同?
    Java核心-02 Exception和Error有什么区别?
    PHP函数技巧篇
    IO
    Markdown 简单使用教程
    FZu Problem 2233 ~APTX4869 (并查集 + sort)
  • 原文地址:https://www.cnblogs.com/xwjBlog/p/11556121.html
Copyright © 2020-2023  润新知