Spring Boot 2 3 新特性優雅停機詳解

2021-10-06 06:19:10 字數 2131 閱讀 3818

先來一段簡單的**,如下:

@restcontroller

public class democontroller

}

當我們流量請求到此介面執行業務邏輯的時候,若服務端此時執行關機 (kill),spring boot 預設情況會直接關閉容器(tomcat 等),導致此業務邏輯執行失敗。在一些業務場景下:會出現資料不一致的情況,事務邏輯不會回滾。

在最新的 spring boot 2.3 版本,內建此功能,不需要再自行擴充套件容器執行緒池來處理,

目前 spring boot 嵌入式支援的 web 伺服器(jetty、reactor netty、tomcat 和 undertow)以及反應式和基於 servlet 的 web 應用程式都支援優雅停機功能。 我們來看下如何使用:

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

此處支援的 shutdown 行為,我們看下 原始碼列舉如下:

/**

* configuration for shutting down a .

* * @author andy wilkinson

* @since 2.3.0

*/public enum shutdown

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

效果體驗

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

關於此處執行kill -2而不是kill -9
@override

public void registershutdownhook() }};

runtime.getruntime().addshutdownhook(this.shutdownhook);

} }

通過 actuate 端點實現優雅停機

post 請求/actuator/shutdown即可執行優雅關機。

原始碼解析

@endpoint(id = "shutdown", enablebydefault = false)

@writeoperation

public mapshutdown()

private void performshutdown()

catch (interruptedexception ex)

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

this.context.close();

}}

不同 web 容器優雅停機行為區別

容器停機行為取決於具體的 web 容器行為web 容器名稱

行為說明

tomcat 9.0.33+

停止接收請求,客戶端新請求等待超時。

reactor netty

停止接收請求,客戶端新請求等待超時。

undertow

停止接收請求,客戶端新請求直接返回 503。

Firefox 23中的新特性(新陷阱)

話說有一天突然發現我們的 頁面上的jquery功能都失效了,firebug中顯示如下的錯誤 blocked loading mixed active content 經過調查,發現原來是測試用的firefox瀏覽器version23裡面有個新特性 security.mixed content.blo...

SpringBoot新特性之全域性懶載入機制

關於延遲載入 在 spring 中,預設情況下所有定的 bean 及其依賴專案都是在應用啟動時建立容器www.cppcns.com上下文是被初始化的。測試 如下 slf4j configuration public class democonfig 啟動應用日誌 main o.a.c.c.c.tom...

2 3演算法的特性

演算法特性 1 有窮性。2 確定性。3 有零個或多個輸入。4 有乙個或多個輸出。5 有效性。2 4怎樣表示乙個演算法 演算法 可以用不同道方法表示。我們常用的表示方法 自然語言 傳統流程圖 結構化流程圖 偽 等。1 自然語言 2 用流程圖表示 通過例子可以看出流程圖的表示演算法,乙個流程圖包含 1 ...