亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot2.3新特性優(yōu)雅停機詳解

 更新時間:2020年05月18日 11:02:23   作者:冷冷  
這篇文章主要介紹了SpringBoot2.3新特性優(yōu)雅停機詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

什么是優(yōu)雅停機

先來一段簡單的代碼,如下:

@RestController
public class DemoController {
 @GetMapping("/demo")
 public String demo() throws InterruptedException {
  // 模擬業(yè)務耗時處理流程
  Thread.sleep(20 * 1000L);
  return "hello";
 }
}

當我們流量請求到此接口執(zhí)行業(yè)務邏輯的時候,若服務端此時執(zhí)行關機 (kill),spring boot 默認情況會直接關閉容器(tomcat 等),導致此業(yè)務邏輯執(zhí)行失敗。在一些業(yè)務場景下:會出現(xiàn)數(shù)據(jù)不一致的情況,事務邏輯不會回滾。

graceful shutdown

在最新的 spring boot 2.3 版本,內置此功能,不需要再自行擴展容器線程池來處理,
目前 spring boot 嵌入式支持的 web 服務器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反應式和基于 Servlet 的 web 應用程序都支持優(yōu)雅停機功能。 我們來看下如何使用:

當使用server.shutdown=graceful啟用時,在 web 容器關閉時,web 服務器將不再接收新請求,并將等待活動請求完成的緩沖期。

配置體驗

此處支持的 shutdown 行為,我們看下 源碼枚舉如下:

/**
 * Configuration for shutting down a {@link WebServer}.
 *
 * @author Andy Wilkinson
 * @since 2.3.0
 */
public enum Shutdown {

 /**
  * 優(yōu)雅停機 (限期停機)
  *
  */
 GRACEFUL,

 /**
  * 立即停機
  */
 IMMEDIATE;

}

緩沖期 timeout-per-shutdown-phase 配置

默認時間為 30S, 意味著最大等待 30S,超時候無論線程任務是否執(zhí)行完畢都會停機處理,一定要合理合理設置。

效果體驗

請求服務端接口

執(zhí)行關閉應用

服務端接到關閉指令

2020-05-17 18:28:28.940 INFO 60341 --- [extShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete
2020-05-17 18:28:45.923 INFO 60341 --- [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete

接口請求執(zhí)行完成

相關知識

關于此處執(zhí)行kill -2 而不是 kill -9

kill -2 相當于快捷鍵 Ctrl + C 會觸發(fā) Java 的 ShutdownHook 事件處理(優(yōu)雅停機或者一些后置處理可參考以下源碼)

//ApplicationContext
 @Override
 public void registerShutdownHook() {
  if (this.shutdownHook == null) {
   // No shutdown hook registered yet.
   this.shutdownHook = new Thread(SHUTDOWN_HOOK_THREAD_NAME) {
    @Override
    public void run() {
     synchronized (startupShutdownMonitor) {
      doClose();
     }
    }
   };
   Runtime.getRuntime().addShutdownHook(this.shutdownHook);
  }
 }

kill -9,暴力美學強制殺死進程,不會執(zhí)行 ShutdownHook

通過 actuate 端點實現(xiàn)優(yōu)雅停機

POST 請求 /actuator/shutdown 即可執(zhí)行優(yōu)雅關機。

源碼解析

@Endpoint(id = "shutdown", enableByDefault = false)
public class ShutdownEndpoint implements ApplicationContextAware {

 @WriteOperation
 public Map<String, String> shutdown() {
  Thread thread = new Thread(this::performShutdown);
  thread.setContextClassLoader(getClass().getClassLoader());
  thread.start();
 }

 private void performShutdown() {
  try {
   Thread.sleep(500L);
  }
  catch (InterruptedException ex) {
   Thread.currentThread().interrupt();
  }

  // 此處close 邏輯和上邊 shutdownhook 的處理一樣
  this.context.close();
 }
}

不同 web 容器優(yōu)雅停機行為區(qū)別

容器停機行為取決于具體的 web 容器行為

web 容器名稱 行為說明
tomcat 9.0.33+ 停止接收請求,客戶端新請求等待超時。
Reactor Netty 停止接收請求,客戶端新請求等待超時。
Undertow 停止接收請求,客戶端新請求直接返回 503。

到此這篇關于SpringBoot2.3新特性優(yōu)雅停機詳解的文章就介紹到這了,更多相關SpringBoot2.3新特性優(yōu)雅停機內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Cloud 優(yōu)雅下線以及灰度發(fā)布實現(xiàn)

    Spring Cloud 優(yōu)雅下線以及灰度發(fā)布實現(xiàn)

    這篇文章主要介紹了Spring Cloud 優(yōu)雅下線以及灰度發(fā)布實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java Stream中自定義Collector實現(xiàn)復雜數(shù)據(jù)收集的方法

    Java Stream中自定義Collector實現(xiàn)復雜數(shù)據(jù)收集的方法

    Java Stream API中的Collector接口是一個強大的工具,它允許我們自定義數(shù)據(jù)收集、轉換和聚合的過程,,本文介紹了Java Stream中自定義Collector實現(xiàn)復雜數(shù)據(jù)收集方法,需要的朋友可以參考下
    2024-08-08
  • Java基礎知識之BufferedReader流的使用

    Java基礎知識之BufferedReader流的使用

    這篇文章主要介紹了Java基礎知識之BufferedReader流的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java動態(tài)編譯執(zhí)行代碼示例

    Java動態(tài)編譯執(zhí)行代碼示例

    這篇文章主要介紹了Java動態(tài)編譯執(zhí)行代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Spring集成Mybatis過程詳細講解

    Spring集成Mybatis過程詳細講解

    mybatis-plus是一個Mybatis的增強工具,在Mybatis的基礎上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關于SpringBoot整合Mybatis-plus案例及用法實例的相關資料,需要的朋友可以參考下
    2023-03-03
  • java中addMouseListener()方法的使用

    java中addMouseListener()方法的使用

    這篇文章主要介紹了java中addMouseListener()方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法

    三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法

    這篇文章主要介紹了三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • 詳解SpringBoot中@SessionAttributes的使用

    詳解SpringBoot中@SessionAttributes的使用

    這篇文章主要通過示例為大家詳細介紹了SpringBoot中@SessionAttributes的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-07-07
  • SpringMVC教程之json交互使用詳解

    SpringMVC教程之json交互使用詳解

    本篇文章主要介紹了SpringMVC教程之json使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • spring boot如何指定啟動端口

    spring boot如何指定啟動端口

    這篇文章主要介紹了spring boot如何指定啟動端口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12

最新評論