亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

SpringBoot停服實(shí)踐

IT那活兒 / 2416人閱讀
SpringBoot停服實(shí)踐
[
一、介紹
]


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


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


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

publicenumShutdown{

/**

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

*/

GRACEFUL,


/**

*立即停機(jī)

*/

IMMEDIATE;


}

[
二、使用方式

]



在application.properties中添加以下配置

當(dāng)server.shutdown=graceful啟用后,在web容器關(guān)閉時(shí),web服務(wù)器將不再接收新請求,并將在緩沖期內(nèi)等待活動(dòng)請求完成。緩沖期timeout-per-shutdown-phase配置:默認(rèn)時(shí)間為30S,意味著最大等待30S,超時(shí)后無論線程任務(wù)是否執(zhí)行完畢都會(huì)停機(jī)處理,需要根據(jù)項(xiàng)目實(shí)際需要合理設(shè)置。


以上配置完畢,重新發(fā)布以后,服務(wù)端就支持優(yōu)雅停服了。

[
三、觸發(fā)優(yōu)雅停服
]

1、對進(jìn)程PID執(zhí)行kill-2 而不是kill-9

  kill-9,暴力美學(xué)強(qiáng)制殺死進(jìn)程,不會(huì)執(zhí)行ShutdownHook;但是kill-2相當(dāng)于快捷鍵Ctrl+ C會(huì)觸發(fā)Java的ShutdownHook事件處理,進(jìn)行優(yōu)雅停機(jī)或者一些后置處理??蓞⒖家韵略创a:

@Override

publicvoidregisterShutdownHook(){

if(this.shutdownHook== null){

 //No shutdown hook registered yet.

 this.shutdownHook= newThread(SHUTDOWN_HOOK_THREAD_NAME) {

  @Override

  publicvoidrun(){

   synchronized(startupShutdownMonitor) {

    doClose();

   }

  }

 };

 Runtime.getRuntime().addShutdownHook(this.shutdownHook);

}

}

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

前提為項(xiàng)目已加入actuator依賴,以及application.properties加入相關(guān)配置如圖


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


源碼解析如下:

@Endpoint(id= "shutdown",enableByDefault = false)

publicclassShutdownEndpointimplementsApplicationContextAware{


@WriteOperation

publicMap shutdown(){

Threadthread = newThread(this::performShutdown);

thread.setContextClassLoader(getClass().getClassLoader());

thread.start();

}


privatevoidperformShutdown(){

try{

 Thread.sleep(500L);

}

catch(InterruptedException ex) {

 Thread.currentThread().interrupt();

}


//此處close邏輯和上邊shutdownhook的處理一樣

this.context.close();

}

}

[
四、例子
]

我們通過一個(gè)demo來驗(yàn)證下是否實(shí)現(xiàn)了優(yōu)雅停服,下面是一個(gè)http測試接口,請求后返回一個(gè)json串。


@GetMapping("/test")
publicObject test(){
   List test = new ArrayList<>();
 
for(inti = 0; i < 5; i++) {
       String s = "test" +i;
       System.out.println(s);
       test.add(s);
     
try{
           Thread.sleep(1000);
       }
catch(InterruptedException e) {
           e.printStackTrace();
      }
   }
   return test;
}


啟動(dòng)項(xiàng)目,正常訪問結(jié)果如下:


先看下未配置優(yōu)雅停服前,在訪問接口過程中停機(jī)的結(jié)果。使用Ctrl+ C模擬在請求執(zhí)行過程中停機(jī),此時(shí)請求中斷,后端日志拋出異常。


配置好優(yōu)雅停服后,再模擬上述情況。由下圖可以看到服務(wù)停止后,停服前的請求能正常返回,日志中也未拋出異常。

[
五、不同springboot嵌入式web容器優(yōu)雅停機(jī)行為區(qū)別
]

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/130099.html

相關(guān)文章

  • 趣米云:停服運(yùn)營公告,請大家及時(shí)備份數(shù)據(jù),請大家申請退款

    摘要:趣米云怎么樣趣米云是一家今年三月份新開的國人商家,就在此前還聲稱過了動(dòng)蕩期,運(yùn)營已經(jīng)穩(wěn)定。但是,趣米云商家突然發(fā)布了公告,決定停服停運(yùn)的公告。趣米云怎么樣?趣米云是一家今年三月份新開的國人商家,就在此前還聲稱過了動(dòng)蕩期,運(yùn)營已經(jīng)穩(wěn)定。但是,趣米云商家突然發(fā)布了公告,決定停服停運(yùn)的公告。就在不久前,商家開啟國慶優(yōu)惠活動(dòng),還是原來的套餐,從30每月降到了26每月,估計(jì)低價(jià)也難得獲取到新的客戶,所...

    stefanieliang 評論0 收藏0
  • 立根鑄魂,麒麟信安攜手歐拉共推操作系統(tǒng)產(chǎn)業(yè)新發(fā)展

    摘要:作為在國產(chǎn)自主創(chuàng)新領(lǐng)域沉淀十余載的操作系統(tǒng)排頭兵,麒麟信安將攜手,立根鑄魂,共推操作系統(tǒng)產(chǎn)業(yè)新發(fā)展。 2021年11月9日-10日,主題為立根鑄魂,逐夢數(shù)字時(shí)代星辰...

    xavier 評論0 收藏0
  • SpringBoot熱部署加持

    摘要:概述進(jìn)行的開發(fā)過程中,我們很多時(shí)候經(jīng)常需要重啟服務(wù)器才能保證修改的源代碼文件或者一些諸如的配置文件以及一些靜態(tài)文件生效,這樣耗時(shí)又低效。 showImg(https://segmentfault.com/img/remote/1460000015363888); 概述 進(jìn)行SpringBoot的Web開發(fā)過程中,我們很多時(shí)候經(jīng)常需要重啟Web服務(wù)器才能保證修改的 源代碼文件、或者一些...

    ixlei 評論0 收藏0
  • Elastic Search搜索引擎在SpringBoot中的實(shí)踐

    摘要:注本文首發(fā)于公眾號,可長按或掃描下面的小心心來訂閱實(shí)驗(yàn)環(huán)境版本版本首先當(dāng)然需要安裝好環(huán)境,最好再安裝上可視化插件來便于我們直觀地查看數(shù)據(jù)。 showImg(https://segmentfault.com/img/remote/1460000015723674); 注: 本文首發(fā)于 My 公眾號 CodeSheep ,可 長按 或 掃描 下面的 小心心 來訂閱 ↓ ↓ ↓ showI...

    Me_Kun 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<