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

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

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

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

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

@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)機 (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)置此功能,不需要再自行擴展容器線程池來處理,
目前 spring boot 嵌入式支持的 web 服務(wù)器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反應(yīng)式和基于 Servlet 的 web 應(yīng)用程序都支持優(yōu)雅停機功能。 我們來看下如何使用:

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

配置體驗

此處支持的 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 配置

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

效果體驗

請求服務(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)雅停機或者一些后置處理可參考以下源碼)

//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é)強制殺死進程,不會執(zhí)行 ShutdownHook

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

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

源碼解析

@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。

到此這篇關(guān)于SpringBoot2.3新特性優(yōu)雅停機詳解的文章就介紹到這了,更多相關(guān)SpringBoot2.3新特性優(yōu)雅停機內(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做一個簡單下載器

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

    Java之SpringBoot-Thymeleaf詳情

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

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

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

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

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

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

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

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

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

    Java SoftReference類案例詳解

    這篇文章主要介紹了Java SoftReference類案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(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

最新評論

顺昌县| 佛冈县| 上杭县| 雅江县| 宁城县| 夏河县| 鲁甸县| 彩票| 来安县| 凌海市| 明星| 北碚区| 进贤县| 卢龙县| 罗平县| 抚松县| 武汉市| 彰化市| 长沙县| 普兰店市| 双柏县| 蕉岭县| 甘谷县| 蓬安县| 孙吴县| 马边| 桂东县| 锡林浩特市| 莫力| 资兴市| 雅江县| 宜良县| 庄浪县| 涿鹿县| 孝昌县| 河北省| 上杭县| 崇州市| 和平区| 三门峡市| 土默特左旗|