0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Boot集群/分布式下的定時任務(wù)說明

jf_78858299 ? 來源:SpringBoot ? 作者:林祥纖 ? 2023-04-12 11:31 ? 次閱讀

如有8個實例,執(zhí)行的時候會隨機分配一個實例運行還是8個都會運行?在這節(jié)博客中沒有辦法完全解決這個問題,在這里拋磚引玉說明下。 看下本章大綱:

(1)回顧定時任務(wù)的實現(xiàn)方式;

(2)集群環(huán)境下的任務(wù)調(diào)度說明;

(3)Spring的Scheduled Task實現(xiàn)集群思路;

(4)Quartz實現(xiàn)集群思路;

我們一起看下本節(jié)具體的內(nèi)容:

(1)回顧定時任務(wù)的實現(xiàn)方式;

定時任務(wù)的實現(xiàn)方式有多種,例如

JDK自帶的Timer+TimerTask方式,

spring3.0以后的調(diào)度任務(wù)(ScheduledTask),

Quartz等。

(2)集群環(huán)境下的任務(wù)調(diào)度說明;

Timer+TimerTask是最基本的解決方案;

Spring自帶的Scheduled Task是一個輕量級的定時任務(wù)調(diào)度器,支持固定時間(支持cron表達(dá)式)和固定時間間隔調(diào)度任務(wù),支持線程池管理

以上兩種方式有一個共同的缺點,那就是應(yīng)用服務(wù)器集群下會出現(xiàn)任務(wù)多次被調(diào)度執(zhí)行的情況,因為集群的節(jié)點之間是不會共享任務(wù)信息的,每個節(jié)點上的任務(wù)都會按時執(zhí)行。

Quartz是一個功能完善的任務(wù)調(diào)度框架,特別牛叉的是它支持集群環(huán)境下的任務(wù)調(diào)度,當(dāng)然代價也很大,需要將任務(wù)調(diào)度狀態(tài)序列化到數(shù)據(jù)庫。Quartz框架需要10多張表協(xié)同,配置繁多。

(3)Spring的Scheduled Task實現(xiàn)集群思路;

如果在實際項目中使用的scheduled task的話,那么也有自己變通的方式進(jìn)行實現(xiàn)。

無非是一個任務(wù)互斥訪問的問題,聲明一把全局的“鎖”作為互斥量,哪個應(yīng)用服務(wù)器拿到這把“鎖”,就有執(zhí)行任務(wù)的權(quán)利,未拿到“鎖”的應(yīng)用服務(wù)器不進(jìn)行任何任務(wù)相關(guān)的操作。另外就是這把“鎖”最好還能在下次任務(wù)執(zhí)行時間點前失效。

(4)Quartz實現(xiàn)集群思路;

選Quartz的團(tuán)隊基本上是沖著Quartz本身實現(xiàn)的集群去的, 不然JDK自帶Timer就可以實現(xiàn)相同的功能, 而Timer存在的單點故障是生產(chǎn)環(huán)境上所不能容忍的。 在自己造個有負(fù)載均衡和支持集群(高可用、伸縮性)的調(diào)度框架又影響項目的進(jìn)度, 所以大多數(shù)團(tuán)隊都直接使用了Quartz來作為調(diào)度框架

一個Quartz集群中的每個節(jié)點是一個獨立的Quartz應(yīng)用,它又管理著其他的節(jié)點。這就意味著你必須對每個節(jié)點分別啟動或停止。Quartz集群中,獨立的Quartz節(jié)點并不與另一其的節(jié)點或是管理節(jié)點通信,而是通過相同的數(shù)據(jù)庫表來感知到另一Quartz應(yīng)用的

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14361
  • Boot
    +關(guān)注

    關(guān)注

    0

    文章

    150

    瀏覽量

    35860
收藏 人收藏

    評論

    相關(guān)推薦

    spark集群使用hanlp進(jìn)行分布式分詞操作說明

    本篇分享一個使用hanlp分詞的操作小案例,即在spark集群中使用hanlp完成分布式分詞的操作,文章整理自【qq_33872191】的博客,感謝分享!以下為全文: 分兩步:第一步:實現(xiàn)
    發(fā)表于 01-21 10:45

    如何在集群部署時實現(xiàn)分布式session?

    集群部署時的分布式 session 如何實現(xiàn)?
    發(fā)表于 07-17 06:57

    Hadoop集群分布式的搭建步驟

    Hadoop集群分布式搭建
    發(fā)表于 11-04 09:19

    【學(xué)習(xí)打卡】OpenHarmony的分布式任務(wù)調(diào)度

    之前我們分享過分布式軟總線和分布式數(shù)據(jù)管理,今天主要說一OpenHarmony的分布式任務(wù)調(diào)度,分布式
    發(fā)表于 07-18 17:06

    Spring Boot定時任務(wù)的重寫方法

    Spring Boot應(yīng)該是目前最火的java開源框架了,它簡化了我們創(chuàng)建一個web服務(wù)的過程,讓我們可以在很短時間、基本零配置就可以啟動一個web服務(wù)。
    的頭像 發(fā)表于 01-20 17:38 ?2462次閱讀

    SpringBoot如何實現(xiàn)動態(tài)增刪啟停定時任務(wù)

    spring boot項目中,可以通過 @EnableScheduling 注解和@Scheduled注解實現(xiàn)定時任務(wù),也可以通過SchedulingConfigurer接口來實現(xiàn)定時任務(wù)
    的頭像 發(fā)表于 09-24 09:49 ?2967次閱讀
    SpringBoot如何實現(xiàn)動態(tài)增刪啟停<b class='flag-5'>定時任務(wù)</b>

    Python定時任務(wù)的實現(xiàn)方式

    在日常工作中,我們常常會用到需要周期性執(zhí)行的任務(wù),一種方式是采用 Linux 系統(tǒng)自帶的 crond 結(jié)合命令行實現(xiàn)。另外一種方式是直接使用Python。接下來整理的是常見的Python定時任務(wù)
    的頭像 發(fā)表于 10-08 15:20 ?5833次閱讀

    說說Spring定時任務(wù)如何大規(guī)模企業(yè)級運用

    定時任務(wù)是業(yè)務(wù)應(yīng)用開發(fā)中非常普遍存在的場景(如:每分鐘掃描超時支付的訂單,每小時清理一次數(shù)據(jù)庫歷史數(shù)據(jù),每天統(tǒng)計前一天的數(shù)據(jù)并生成報表等等),解決方案很多,Spring 框架提供了一種通過注解來配置定時任務(wù)的解決方案,接入非常的
    的頭像 發(fā)表于 11-04 09:36 ?711次閱讀

    xxl-job任務(wù)調(diào)度中間件解決定時任務(wù)的調(diào)度問題

    xxl-job是一款非常優(yōu)秀的任務(wù)調(diào)度中間件,輕量級、使用簡單、支持分布式等優(yōu)點,讓它廣泛應(yīng)用在我們的項目中,解決了不少定時任務(wù)的調(diào)度問題。
    的頭像 發(fā)表于 01-31 09:53 ?2023次閱讀

    Spring Boot中整合兩種定時任務(wù)的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具備這兩個 Spring 中的定時任務(wù)實現(xiàn)策
    的頭像 發(fā)表于 04-07 14:55 ?1580次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>中整合兩種<b class='flag-5'>定時任務(wù)</b>的方法

    Spring Boot中如何使用定時任務(wù)

    本文介紹在 Spring Boot 中如何使用定時任務(wù),使用非常簡單,就不做過多說明了。
    的頭像 發(fā)表于 04-12 10:56 ?991次閱讀

    如何動態(tài)添加修改刪除定時任務(wù)

    如何動態(tài)添加修改刪除定時任務(wù)?那么我們一起看看具體怎么實現(xiàn),先看下本節(jié)大綱: (1)思路說明; (2)代碼解析; (3)修改定時任務(wù)執(zhí)行周期特別說明;
    的頭像 發(fā)表于 04-12 11:06 ?1096次閱讀

    spring分布式框架有哪些

    Spring分布式框架。 Spring Cloud Spring Cloud是基于Spring Boo
    的頭像 發(fā)表于 11-16 10:58 ?805次閱讀

    springclould分布式教程

    Spring Cloud是一個基于Spring Boot分布式系統(tǒng)開發(fā)工具,它提供了一系列的分布式系統(tǒng)解決方案,可以幫助開發(fā)者快速構(gòu)建和部
    的頭像 發(fā)表于 11-16 10:59 ?531次閱讀

    springcloud如何實現(xiàn)分布式

    Spring Cloud是基于Spring Boot開發(fā)的一套分布式系統(tǒng)解決方案,它主要包括了多個子項目,如服務(wù)注冊與發(fā)現(xiàn)、配置中心、負(fù)載均衡、斷路器、路由等等。通過使用
    的頭像 發(fā)表于 11-16 11:01 ?708次閱讀