解析Java定時任務(wù)的選型及改造問題
【前言】
項目中用到了定時任務(wù),項目之初為了快速開發(fā)上線,當時直接采用最簡單的Linux自帶的crontab;項目逐漸維定下來時,針對定時任務(wù)自己進行了相關(guān)研究,并根據(jù)項目實際情況進行了對比以及相關(guān)改造。
【比一比&改一改】
一、項目目前定時任務(wù)現(xiàn)狀
1、 使用Linux系統(tǒng)的crontab直接調(diào)用Java服務(wù)
2、 優(yōu)缺點:
(1)優(yōu)點:部署簡單,由linux系統(tǒng)維護相對Java進程維護更加維定
(2)缺點:單機部署,風險大;出問題后排錯難度大;需要運維介入成本大
(3)總結(jié):針對目前項目情況,弊大于利
二、Java主流三大定時任務(wù)框架優(yōu)缺點
1、 選型時原則:少服務(wù)器 后期維護方便 增加任務(wù)省事 而且快捷 不涉及啟停服務(wù)
2、 Quartz
(1)優(yōu)點:支持集群部署
(2)缺點:沒有自帶的管理界面;調(diào)度邏輯和執(zhí)行任務(wù)耦合在一起;維護需要重啟服務(wù)
(3)總結(jié):針對目前項目情況,利弊相同
3、 xxl-job
(1)優(yōu)點:支持集群部署;提供運維界面維護成本小;自帶錯誤預(yù)警;相對elastic-job來說不需要額外的組件(zookeeper);支持調(diào)度策略;支持分片;
(2)缺點:相對Quartz來說需要多部署調(diào)度中心
(3)總結(jié):針對目前項目情況,利大于弊
4、 elastic-job
(1)優(yōu)點:支持集群部署;維護成本小
(2)缺點:elastic-job需要zookeeper,zookeeper集群高可用至少需要三臺服務(wù)器
(3)總結(jié):針對目前項目情況,弊大于利
5、 小結(jié):
綜合選型原則及三個定時任務(wù)框架的優(yōu)缺點和目前項目的狀況,建議選用xxl-job
三、xxl-job一些特性
1、 xxl-job參考資料: http://www.dhdzp.com/article/234826.htm
2、 一些實用特性:
(1)執(zhí)行失敗可以查看日志

(2)支持郵件報警

(3)路由策略支持輪詢等策略,可以減輕執(zhí)行服務(wù)器的壓力

(4)輪詢時間等參數(shù)修改后立即生效

(5)執(zhí)行器有問題或新增,快速識別

(6)調(diào)度中心高可用,調(diào)度中心可以集群部署(集群部署的機器時鐘必須同步),如果調(diào)度中心沒有做負載在執(zhí)行器的配置中需要配多個地址,如果調(diào)度中心配置負載則執(zhí)行器配置負載地址即可

(7)執(zhí)行器高可用(執(zhí)行器可以集群部署)
四、項目中加入xxl-job結(jié)合
1、 說明:以下Demo以短信發(fā)送服務(wù)定時任務(wù)為例
2、 建議:執(zhí)行器根據(jù)不同的模塊建立工程(既方便統(tǒng)一部署又方便升級維護),比如:結(jié)算的定時任務(wù)可以組成一個工程;短信定時任務(wù)可以組成一個工程等
3、 項目中增加xxl-job
(1)在pom中增加依賴

(2)application.properties增加相關(guān)配置

(3)增加config解析類

(4)增加執(zhí)行器

【總結(jié)】
在技術(shù)選型的時候既要站在當前也要考慮到未來,沒有什么是永遠的唯一的,要結(jié)合具體的場景業(yè)務(wù)用發(fā)展的眼光去看待。
到此這篇關(guān)于解析Java定時任務(wù)的選型及改造問題的文章就介紹到這了,更多相關(guān)java定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL 新增字段但 Java 實體未更新存在潛在問題與解決方案
在 Java + MySQL 的開發(fā)中,我們通常使用 ORM 框架(如 MyBatis、MyBatis-Plus、Hibernate)來映射數(shù)據(jù)庫表與 Java 對象,這篇文章主要介紹了MySQL 新增字段但 Java 實體未更新:潛在問題與解決方案,需要的朋友可以參考下2025-04-04
Spring?Boot監(jiān)控SQL運行情況的全過程
這篇文章主要給大家介紹了關(guān)于Spring?Boot監(jiān)控SQL運行情況的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-02-02
Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實例解析
這篇文章主要介紹了Java向上轉(zhuǎn)型和向下轉(zhuǎn)型實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
SpringDataJpa如何使用union多表分頁條件查詢
這篇文章主要介紹了SpringDataJpa如何使用union多表分頁條件查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
java鏈表應(yīng)用--基于鏈表實現(xiàn)隊列詳解(尾指針操作)
這篇文章主要介紹了java鏈表應(yīng)用--基于鏈表實現(xiàn)隊列,結(jié)合實例形式分析了java基于鏈表實現(xiàn)隊列尾指針相關(guān)操作使用技巧,需要的朋友可以參考下2020-03-03
JavaWeb Spring依賴注入深入學(xué)習(xí)
這篇文章主要為大家詳細介紹了JavaWeb Spring依賴注入,深入學(xué)習(xí)Spring依賴注入,感興趣的小伙伴們可以參考一下2016-09-09
解決java攔截器獲取POST入?yún)?dǎo)致@RequestBody參數(shù)丟失問題
文章講述了在Java開發(fā)中使用攔截器獲取POST請求入?yún)r,由于流關(guān)閉導(dǎo)致`@RequestBody`參數(shù)丟失的問題,并提出了一種解決方案,解決方案包括自定義方法、防止流丟失、過濾器和攔截器的合理組織和使用,最終確保了參數(shù)的正確傳遞2024-11-11

