最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

graceful shutdown

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

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

配置體驗(yàn)

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

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

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

 /**
  * 立即停機(jī)
  */
 IMMEDIATE;

}

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

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

效果體驗(yàn)

請求服務(wù)端接口

執(zhí)行關(guān)閉應(yīng)用

服務(wù)端接到關(guān)閉指令

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í)行完成

相關(guān)知識

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

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

//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,暴力美學(xué)強(qiáng)制殺死進(jìn)程,不會執(zhí)行 ShutdownHook

通過 actuate 端點(diǎn)實(shí)現(xiàn)優(yōu)雅停機(jī)

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

源碼解析

@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)雅停機(jī)行為區(qū)別

容器停機(jī)行為取決于具體的 web 容器行為

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

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

相關(guān)文章

  • Java如何連接數(shù)據(jù)庫圖文教程

    Java如何連接數(shù)據(jù)庫圖文教程

    關(guān)于java數(shù)據(jù)庫的文章早已是非常多了,本文是對我個人過往學(xué)習(xí)java數(shù)據(jù)庫,理解及應(yīng)用java數(shù)據(jù)庫的一個總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java如何連接數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • java基于Socket做一個簡單下載器

    java基于Socket做一個簡單下載器

    這篇文章主要為大家詳細(xì)介紹了java如何基于Socket制作一個簡單下載器,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java之SpringBoot-Thymeleaf詳情

    Java之SpringBoot-Thymeleaf詳情

    聊Thymeleaf,需要知道為什么到了SpringBoot中就不用JSP了?這跟SpringBoot打包方式有點(diǎn)關(guān)系,SpringBoot項(xiàng)目打包是jar包,下面文章小編就對此做一個詳細(xì)介紹,需要的朋友可以參考一下
    2021-09-09
  • Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn)

    Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 如何將java -jar啟動的服務(wù)設(shè)置為systemd服務(wù)管理方式

    如何將java -jar啟動的服務(wù)設(shè)置為systemd服務(wù)管理方式

    本文詳細(xì)介紹了如何將Java應(yīng)用程序配置為由systemd管理的服務(wù),包括創(chuàng)建和配置.service文件的步驟,以及如何啟動、停止和查看服務(wù)狀態(tài)
    2025-01-01
  • 貪心算法原理及在Java中的使用

    貪心算法原理及在Java中的使用

    我們可能在好多地方都會聽到貪心算法這一概念,并且它的算法思想也比較簡單就是說算法只保證局部最優(yōu),進(jìn)而達(dá)到全局最優(yōu)。但我們實(shí)際編程的過程中用的并不是很多,究其原因可能是貪心算法使用的條件比較苛刻,所要解決的問題必須滿足貪心選擇性質(zhì)
    2021-05-05
  • 使用Java注解模擬spring ioc容器過程解析

    使用Java注解模擬spring ioc容器過程解析

    這篇文章主要介紹了使用Java注解模擬spring ioc容器過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java SoftReference類案例詳解

    Java SoftReference類案例詳解

    這篇文章主要介紹了Java SoftReference類案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot整合Spring?Security過濾器鏈加載執(zhí)行流程源碼分析(最新推薦)

    SpringBoot整合Spring?Security過濾器鏈加載執(zhí)行流程源碼分析(最新推薦)

    Spring?Boot?對于?Spring?Security?提供了自動化配置方案,可以使用更少的配置來使用?Spring?Security,這篇文章主要介紹了SpringBoot整合Spring?Security過濾器鏈加載執(zhí)行流程源碼分析,需要的朋友可以參考下
    2023-02-02
  • java返回json請求中文變成問號的問題及解決

    java返回json請求中文變成問號的問題及解決

    這篇文章主要介紹了java返回json請求中文變成問號的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論

高平市| 永仁县| 莱西市| 九江市| 新蔡县| 股票| 华池县| 汤阴县| 太白县| 繁昌县| 石棉县| 喜德县| 巫溪县| 长顺县| 湘潭县| 鹤壁市| 虞城县| 江西省| 昌乐县| 嘉禾县| 秭归县| 霞浦县| 曲周县| 华池县| 桃江县| 永清县| 安西县| 思南县| 凌海市| 静乐县| 衡东县| 库车县| 偃师市| 温泉县| 曲水县| 开封市| 峨眉山市| 象山县| 蓝田县| 卢湾区| 连城县|