先來一段簡單的**,如下:
@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 ...