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

SpringBoot應用優(yōu)雅停機的3種標準方案

 更新時間:2026年03月27日 08:48:05   作者:希望永不加班  
所謂優(yōu)雅停機(Graceful Shutdown),就是讓應用在關閉前停止接收新請求;把正在處理的請求執(zhí)行完;釋放線程池、連接池、MQ 消費者等資源;最后再安全退出,今天講清楚 SpringBoot優(yōu)雅停機的3種標準方案,生產(chǎn)直接抄配置,需要的朋友可以參考下

線上發(fā)布、重啟服務時,你是不是直接 kill -9 一把梭?
后果往往是:

  • 正在處理的請求直接中斷,前端報錯 502;
  • 事務沒提交,導致數(shù)據(jù)不一致;
  • 線程池、連接池暴力關閉,資源泄漏;
  • MQ 消息消費一半,出現(xiàn)重復/丟失。

所謂優(yōu)雅停機(Graceful Shutdown),就是讓應用在關閉前:

  • 停止接收新請求;
  • 把正在處理的請求執(zhí)行完;
  • 釋放線程池、連接池、MQ 消費者等資源;
  • 最后再安全退出。

今天講清楚 SpringBoot 優(yōu)雅停機的 3 種標準方案,生產(chǎn)直接抄配置。

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

簡單說 4 件事:

  1. 不再接收新的 HTTP 請求 / 新消息
  2. 等待正在執(zhí)行的業(yè)務執(zhí)行完畢
  3. 自動關閉線程池、數(shù)據(jù)庫連接、Redis 連接
  4. 安全退出 JVM,不丟數(shù)據(jù)、不中斷事務

SpringBoot 2.3+ 已經(jīng)內(nèi)置支持,不用自己寫復雜鉤子。

二、方式1:配置文件開啟內(nèi)置優(yōu)雅停機

1)application.yml 配置

server:
# 優(yōu)雅停機最大等待時間(單位為秒)
shutdown: graceful
spring:
  lifecycle:
# 所有 Bean 關閉的最大等待時間
timeout-per-shutdown-phase: 30s

server.shutdown: graceful

:開啟 Web 容器優(yōu)雅停機

timeout-per-shutdown-phase: 30s

:給 30 秒緩沖時間

2)支持的容器

  • Tomcat
  • Jetty
  • Undertow

全都通用,不用改代碼。

三、方式2:Actuator 優(yōu)雅停機

適合:發(fā)布平臺、腳本自動化重啟。

1)引入依賴

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
<dependency>

2)開啟 shutdown 端點

management:
  endpoints:
    web:
      exposure:
include: shutdown,health
  endpoint:
    shutdown:
enabled:true

3)遠程調(diào)用關閉

curl-X POST http://localhost:8080/actuator/shutdown

應用會優(yōu)雅停機,不是暴力殺進程。

4)生產(chǎn)安全提醒

  • 一定要配合 Spring Security 權限控制
  • 只對內(nèi)網(wǎng)開放,不要暴露到公網(wǎng)
  • 不要在生產(chǎn)隨意打開 /actuator/shutdown

四、方式3:kill + 信號優(yōu)雅停機

最常用、最推薦的生產(chǎn)方式。

正確命令

kill PID
# 或者
kill-15 PID

絕對禁止

kill-9 PID   # 暴力殺,不優(yōu)雅,會丟數(shù)據(jù)!

SpringBoot 會捕獲 SIGTERM 信號,自動執(zhí)行優(yōu)雅停機流程。

五、如何保證自己的業(yè)務也“優(yōu)雅”?

如果你有:

  • 自定義線程池
  • MQ 消費者
  • 定時任務
  • socket 長連接

需要加一個關閉鉤子,保證資源釋放。

@Component
publicclassAppShutdownHook{
@PreDestroy
publicvoiddestroy(){
// 關閉線程池、消費者、連接等
System.out.println("應用正在優(yōu)雅關閉:清理自定義資源");
}
}

或者實現(xiàn) DisposableBean。

六、優(yōu)雅停機完整流程

  1. 收到關閉信號(kill / actuator / 控制臺停止)
  2. Web 容器不再接受新請求
  3. 等待正在執(zhí)行的 HTTP 請求完成
  4. 關閉 Spring 容器,執(zhí)行 @PreDestroy
  5. 關閉線程池、數(shù)據(jù)源、MQ 客戶端
  6. JVM 安全退出

整個過程在 timeout 時間內(nèi)完成。

七、生產(chǎn)最佳實踐

  1. 一律用 kill PID,禁止 kill -9
  2. 配置優(yōu)雅停機超時 20~30s
  3. 發(fā)布腳本先切流量,再停機
  4. 自定義線程池/消費者必須加關閉鉤子
  5. 用 Actuator 做自動化發(fā)布時開啟權限
  6. 日志里觀察停機日志,確認是 graceful 關閉

八、常見坑

超時時間太短

長接口、大事務沒執(zhí)行完就被關閉 → 加大 timeout

用 kill -9

等于直接拔電源,任何優(yōu)雅機制都失效

自定義線程池沒關閉

應用關了,線程還在跑 → 用 @PreDestroy 關閉

Actuator 未授權暴露 shutdown

被人惡意調(diào)用,直接關服務

到此這篇關于SpringBoot應用優(yōu)雅停機的3種標準方案的文章就介紹到這了,更多相關SpringBoot優(yōu)雅停機方案內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java+selenium爬取圖片簽名的方法

    java+selenium爬取圖片簽名的方法

    這篇文章主要為大家詳細介紹了java+selenium爬取圖片簽名的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 解析Java的可變長參數(shù)列表及其使用時的注意點

    解析Java的可變長參數(shù)列表及其使用時的注意點

    這篇文章主要介紹了解析Java的可變參數(shù)列表及其使用時的注意點,注意可變參數(shù)必須位于最后一項,需要的朋友可以參考下
    2016-03-03
  • 關于RowBounds分頁原理、RowBounds的坑記錄

    關于RowBounds分頁原理、RowBounds的坑記錄

    這篇文章主要介紹了關于RowBounds分頁原理、RowBounds的坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java實現(xiàn)簡單學生信息管理系統(tǒng)

    Java實現(xiàn)簡單學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • spring源碼閱讀--aop實現(xiàn)原理講解

    spring源碼閱讀--aop實現(xiàn)原理講解

    這篇文章主要介紹了spring源碼閱讀--aop實現(xiàn)原理講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot+websocket實現(xiàn)消息對話功能

    SpringBoot+websocket實現(xiàn)消息對話功能

    WebSocket是一種在Web應用程序中實現(xiàn)實時雙向通信的技術,它可以用于在線游戲、在線聊天、推送通知、實時監(jiān)控等,并且比傳統(tǒng)的輪詢技術更加高效和可靠,本文就給大家介紹基于SpringBoot+websocket實現(xiàn)消息對話功能,感興趣的小伙伴可以自己動手試一試
    2023-09-09
  • 基于Java的界面開發(fā)詳細步驟(用戶注冊登錄)

    基于Java的界面開發(fā)詳細步驟(用戶注冊登錄)

    通過一段時間Java Web的學習,寫一個簡單的注冊登陸界面來做個總結,這篇文章主要給大家介紹了基于Java的界面開發(fā)(用戶注冊登錄)的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java發(fā)送http請求的示例(get與post方法請求)

    Java發(fā)送http請求的示例(get與post方法請求)

    這篇文章主要介紹了Java發(fā)送http請求的示例(get與post方法請求),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • Java多線程中Lock的使用小結

    Java多線程中Lock的使用小結

    jdk1.5 以后,提供了各種鎖,本文主要介紹了Java多線程中Lock的使用小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 學習Java內(nèi)存模型JMM心得

    學習Java內(nèi)存模型JMM心得

    這篇文章主要介紹了學習Java內(nèi)存模型JMM的心得以及對其原理做了深入的介紹,有興趣的朋友學習下吧。
    2017-12-12

最新評論

安宁市| 盐津县| 太谷县| 洛南县| 阳朔县| 双峰县| 瓮安县| 怀安县| 灌云县| 宁乡县| 嫩江县| 嘉鱼县| 屏山县| 青川县| 冷水江市| 平利县| 措美县| 依兰县| 南城县| 山阴县| 武义县| 沙雅县| 北安市| 含山县| 石阡县| 永川市| 逊克县| 常山县| 九江市| 乳山市| 陇西县| 凌源市| 永平县| 黔西县| 灵武市| 文成县| 房山区| 吴川市| 内乡县| 金塔县| 会宁县|