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;
    }

    完成

  • 相关阅读:
    iOS开发之字符串去掉首尾空格换行
    iOS开发之截取UIScrollView长图方法、截长图
    iOS开发之语音录制
    iOS开发之程序各种状态监听
    iOS开发之监听应用进入前台后台
    iOS开发之波浪动画效果
    mysql 主从一致性检查
    git 备份和恢复
    tomcat server.xml配置文件 解析
    检查MySQL主从数据一致性
  • 原文地址:https://www.cnblogs.com/xwjBlog/p/11556121.html
Copyright © 2011-2022 走看看