亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

什么是鉤子函數,在學習鉤子函數之前,小編先提一個面試問題。

請問在Spring中,如果JVM異常終止,Spring是如何保證會釋放掉占用的資源,比如說數據庫連接等資源呢?

鉤子函數非常簡單,簡單到小編只用摘抄一段Spring代碼即可。走你,現在開始。

Spring 容器中 Bean 在什么時候執行銷毀方法?

我們知道在Spring中定義銷毀方法有兩種方式

  1. 實現 DisposableBean 的 destroy 方法。
  2. 使用 @PreDestroy 注解修飾方法
高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 

那么在什么時候執行銷毀方法?

高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 

  • 主動執行銷毀bean
高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 

  • JVM關閉時候自動執行銷毀方法。

這里就要用到鉤子函數了, Spring 的鉤子函數在 AbstractApplicationContext#shutdownHook屬性。

如果我們是SpringBoot項目我們看到在SpringApplication啟動時候會注冊一個鉤子函數

高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 

如何定義鉤子函數?

簡直太簡單了,沒有任何學習成本。一行代碼就能搞定。

高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 


高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 

觸發鉤子函數的場景

只要不是機器斷電,強制kill -9 強制殺進程,都會觸發。

高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 

鉤子函數能做什么?

高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 

正如上圖所示優雅停機,在項目將要關閉時候,主動釋放程序占用的資源信息,釋放db連接池的連接等其他占用的資源信息。 如果我們是 Spring 項目其實我們不用自己定義鉤子函數,我們只要使用Spring提供給我們的銷毀方法即可。因為 Spring定義的鉤子函數中會去執行, DisposableBean.destory() 和被 PreDestroy 修飾的方法。

高級Java開發者都知道的Hook鉤子函數,你還不知道嗎?

 

doClose()方法會執行bean的destroy(),也會執行SmartLifeCycle的stop()方法,我們就可以通過重寫這些方法來實現對象的關閉,生命周期的管理,實現平滑shutdown。

分享到:
標簽:鉤子 函數 Hook
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定