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

SpringBoot應(yīng)用優(yōu)雅停機(jī)的3種標(biāo)準(zhǔn)方案

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

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

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

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

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

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

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

簡(jiǎn)單說 4 件事:

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

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

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

1)application.yml 配置

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

server.shutdown: graceful

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

timeout-per-shutdown-phase: 30s

:給 30 秒緩沖時(shí)間

2)支持的容器

  • Tomcat
  • Jetty
  • Undertow

全都通用,不用改代碼。

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

適合:發(fā)布平臺(tái)、腳本自動(dòng)化重啟

1)引入依賴

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

2)開啟 shutdown 端點(diǎn)

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

3)遠(yuǎn)程調(diào)用關(guān)閉

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

應(yīng)用會(huì)優(yōu)雅停機(jī),不是暴力殺進(jìn)程。

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

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

四、方式3:kill + 信號(hào)優(yōu)雅停機(jī)

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

正確命令

kill PID
# 或者
kill-15 PID

絕對(duì)禁止

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

SpringBoot 會(huì)捕獲 SIGTERM 信號(hào),自動(dòng)執(zhí)行優(yōu)雅停機(jī)流程。

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

如果你有:

  • 自定義線程池
  • MQ 消費(fèi)者
  • 定時(shí)任務(wù)
  • socket 長(zhǎng)連接

需要加一個(gè)關(guān)閉鉤子,保證資源釋放。

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

或者實(shí)現(xiàn) DisposableBean。

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

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

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

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

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

八、常見坑

超時(shí)時(shí)間太短

長(zhǎng)接口、大事務(wù)沒執(zhí)行完就被關(guān)閉 → 加大 timeout

用 kill -9

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

自定義線程池沒關(guān)閉

應(yīng)用關(guān)了,線程還在跑 → 用 @PreDestroy 關(guān)閉

Actuator 未授權(quán)暴露 shutdown

被人惡意調(diào)用,直接關(guān)服務(wù)

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

相關(guān)文章

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

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

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

    解析Java的可變長(zhǎng)參數(shù)列表及其使用時(shí)的注意點(diǎn)

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

    關(guān)于RowBounds分頁原理、RowBounds的坑記錄

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

    Java實(shí)現(xiàn)簡(jiǎn)單學(xué)生信息管理系統(tǒng)

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

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

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

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

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

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

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

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

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

    Java多線程中Lock的使用小結(jié)

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

    學(xué)習(xí)Java內(nèi)存模型JMM心得

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

最新評(píng)論

玉山县| 仪征市| 塘沽区| 思南县| 关岭| 七台河市| 蒙城县| 通海县| 临夏市| 鹤庆县| 新安县| 玉龙| 兖州市| 通州市| 巴马| 武功县| 民县| 蒙阴县| 克拉玛依市| 定西市| 贡觉县| 大同市| 舒兰市| 梁山县| 荣成市| 周宁县| 弥渡县| 保亭| 绵竹市| 潜山县| 京山县| 赤壁市| 轮台县| 明光市| 高雄市| 卓尼县| 铁力市| 闽清县| 若羌县| 奉化市| 焦作市|