欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot的單體和分布式的任務架構(gòu)詳解

 更新時間:2025年05月15日 11:33:58   作者:墮落年代  
在Spring Boot生態(tài)中,定時任務框架的選擇需根據(jù)架構(gòu)類型(單體或分布式)和功能需求進行權(quán)衡,以下從框架特性、適用場景及Spring Boot集成方式等角度,詳細梳理主流的定時任務框架及其分類,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧

在Spring Boot生態(tài)中,定時任務框架的選擇需根據(jù)架構(gòu)類型(單體或分布式)和功能需求進行權(quán)衡。以下從框架特性、適用場景及Spring Boot集成方式等角度,詳細梳理主流的定時任務框架及其分類:

一、單體架構(gòu)下的定時任務框架

核心要求:輕量級、易用性高、無需復雜協(xié)調(diào)機制
適用場景:單機部署、任務邏輯簡單、無需高可用或分片處理。

1. Spring Task(@Scheduled)

特性

  • Spring自帶的輕量級定時任務框架,通過@EnableScheduling@Scheduled注解快速配置任務。
  • 支持Cron表達式、固定頻率(fixedRate)、固定延遲(fixedDelay)等調(diào)度方式。
  • 單線程執(zhí)行:默認串行執(zhí)行任務,需結(jié)合@Async或自定義線程池實現(xiàn)并發(fā)。

優(yōu)點

  • 零額外依賴,與Spring Boot無縫集成。
  • 配置簡單,適合快速開發(fā)。

缺點

  • 不支持動態(tài)修改任務參數(shù)(需重啟應用)。
  • 無分布式協(xié)調(diào)能力,多節(jié)點部署時任務重復執(zhí)行。

Spring Boot集成示例

@SpringBootApplication
@EnableScheduling
public class App { ... }
@Component
public class MyTask {
    @Scheduled(cron = "0 */5 * * * ?")
    public void execute() { ... }
}

2. ScheduledExecutorService

特性

  • JDK內(nèi)置的線程池調(diào)度工具,通過ScheduledThreadPoolExecutor實現(xiàn)多線程并發(fā)執(zhí)行。
  • 支持延遲任務(schedule)和周期性任務(scheduleAtFixedRate)。

優(yōu)點

  • 輕量級,無需Spring依賴。
  • 避免單線程阻塞問題,適合CPU密集型任務。

缺點

  • 不支持Cron表達式,需自行實現(xiàn)復雜調(diào)度邏輯。
  • 無任務持久化能力,應用重啟后任務丟失。

示例

ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
executor.scheduleAtFixedRate(() -> { ... }, 0, 1, TimeUnit.SECONDS);

3. Timer 特性:

  • JDK早期提供的定時器類(java.util.Timer),通過TimerTask定義任務邏輯。

優(yōu)點

  • 簡單易用,適合極簡場景。

缺點

  • 單線程串行執(zhí)行,任務阻塞導致調(diào)度不準確。異常處理機制不完善,任務崩潰后整體終止。
  • 現(xiàn)狀: 已被ScheduledExecutorService取代,不推薦新項目使用。

二、分布式架構(gòu)下的定時任務框架

核心要求:高可用、任務分片、故障轉(zhuǎn)移、負載均衡
適用場景:多節(jié)點集群部署、任務需彈性擴縮容、避免重復執(zhí)行。

1. Quartz

特性

  • 功能強大:支持Cron表達式、日歷調(diào)度、任務持久化(JDBCJobStore)。
  • 集群模式:通過數(shù)據(jù)庫鎖(如LOCKS表)實現(xiàn)節(jié)點協(xié)調(diào),避免任務重復執(zhí)行。
  • 任務分片:需自行實現(xiàn)分片邏輯,無原生支持。

優(yōu)點

  • 成熟穩(wěn)定,社區(qū)支持廣泛。Spring Boot 2.0+內(nèi)置集成,簡化配置。

缺點

  • 侵入性強:需定義Job接口實現(xiàn)類,與業(yè)務代碼耦合。
  • 性能瓶頸:數(shù)據(jù)庫鎖競爭在高并發(fā)下可能成為瓶頸。

Spring Boot集成

# application.yml
spring:
  quartz:
    job-store-type: jdbc
    properties:
      org.quartz.scheduler.instanceName: MyScheduler
      org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
      org.quartz.jobStore.dataSource: myDS
@Bean
public JobDetail sampleJobDetail() {
    return JobBuilder.newJob(SampleJob.class).storeDurably().build();
}

2. Elastic-Job

特性

  • 彈性調(diào)度:基于ZooKeeper實現(xiàn)分布式協(xié)調(diào),支持分片、故障轉(zhuǎn)移、彈性擴縮容。
  • 任務分片:將任務拆分為多個分片項,由不同節(jié)點并行處理。
  • 輕量級:無中心化設計,通過jar包集成。

優(yōu)點

  • 高可用性,任務失敗后自動重新分配。支持動態(tài)擴容,資源利用率高。

缺點

  • 依賴ZooKeeper,增加運維復雜度。社區(qū)活躍度低于XXL-JOB。

Spring Boot集成

<dependency>
    <groupId>org.apache.shardingsphere.elasticjob</groupId>
    <artifactId>elasticjob-lite-spring-boot-starter</artifactId>
</dependency>
@ElasticJobScheduler(
    jobName = "myJob",
    cron = "0/5 * * * * ?",
    shardingTotalCount = 3
)
public class MyJob implements SimpleJob {
    @Override
    public void execute(ShardingContext context) { ... }
}

3. XXL-JOB

特性

  • 中心化調(diào)度:調(diào)度中心(Admin)與執(zhí)行器(Executor)分離,通過RPC通信。
  • 可視化界面:提供任務管理、日志追蹤、報警通知等運維功能。
  • 分片廣播:支持動態(tài)分片,任務參數(shù)通過HTTP API傳遞。

優(yōu)點

  • 開箱即用,學習成本低。
  • 支持GLUE腳本,動態(tài)修改任務邏輯。

缺點

  • 需獨立部署調(diào)度中心,增加架構(gòu)復雜度。
  • 社區(qū)版功能有限,企業(yè)版需付費。

Spring Boot集成

# application.yml
xxl:
  job:
    admin:
      addresses: http://xxl-job-admin:8080/xxl-job-admin
    executor:
      appname: xxl-job-executor
      port: 9999
@XxlJob("demoJobHandler")
public void execute() { ... }

三、框架對比與選型建議

框架架構(gòu)類型分布式支持任務分片可視化界面學習成本適用場景
Spring Task單體???簡單定時任務
ScheduledExecutor單體???多線程并發(fā)任務
Quartz分布式?(需配置)??中小規(guī)模集群任務
Elastic-Job分布式???(需插件)中高大數(shù)據(jù)量分片處理
XXL-JOB分布式???企業(yè)級任務調(diào)度與管理

選型策略

  • 單體應用:優(yōu)先使用Spring Task,復雜場景結(jié)合線程池優(yōu)化。
  • 分布式輕量級需求:選擇Quartz,需容忍數(shù)據(jù)庫依賴和鎖競爭。
  • 高可用與分片:Elastic-Job或XXL-JOB,后者適合需要運維界面的場景。

四、總結(jié)

在Spring Boot中,定時任務框架的選擇需權(quán)衡架構(gòu)需求與功能復雜度:

  • 單體架構(gòu):Spring Task和ScheduledExecutorService提供快速開發(fā)能力。
  • 分布式架構(gòu):Quartz適合基礎(chǔ)需求,Elastic-Job和XXL-JOB則覆蓋高可用、分片及運維管理。

開發(fā)者應根據(jù)任務規(guī)模、團隊技術(shù)棧及運維能力,選擇最適配的框架。

到此這篇關(guān)于SpringBoot的單體和分布式的任務架構(gòu)的文章就介紹到這了,更多相關(guān)SpringBoot分布式的任務架構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用res:bean屬性復制避免null值覆蓋版本

    使用res:bean屬性復制避免null值覆蓋版本

    這篇文章主要介紹了使用res:bean屬性復制避免null值覆蓋版本的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java實現(xiàn)合并word文檔的示例代碼

    Java實現(xiàn)合并word文檔的示例代碼

    在做項目中,經(jīng)常會遇到一種情況,需要將一個小word文檔的內(nèi)容插入到一個大word(主文檔)中。本文就為大家準備了Java實現(xiàn)合并word文檔的方法,需要的可以參考一下
    2022-08-08
  • Spring無法接收List<event>的解決方案

    Spring無法接收List<event>的解決方案

    在日常開發(fā)中,我們常使用 Spring 的 @EventListener 注解來監(jiān)聽事件,但在處理 批量事件 時,卻可能遇到一些“看似合理但無法生效”的監(jiān)聽方式,本文以實際具體案例為出發(fā)點,結(jié)合源碼分析事件派發(fā)邏輯,并給出兩種可行解決方案,需要的朋友可以參考下
    2025-04-04
  • 帶你了解mybatis如何實現(xiàn)讀寫分離

    帶你了解mybatis如何實現(xiàn)讀寫分離

    本篇文章主要介紹了MyBatis實現(xiàn)數(shù)據(jù)讀寫分離的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-08-08
  • Java解析DICOM圖之如何獲得16進制數(shù)據(jù)詳解

    Java解析DICOM圖之如何獲得16進制數(shù)據(jù)詳解

    DICOM就是醫(yī)學數(shù)字成像和通信,是醫(yī)學圖像和相關(guān)信息的國際標準(ISO 12052),下面這篇文章主要給大家介紹了關(guān)于Java解析DICOM圖之如何獲得16進制數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-10-10
  • Java 中的io模型詳解

    Java 中的io模型詳解

    這篇文章主要介紹了Java 中io模型的相關(guān)資料,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-04-04
  • java啟動jar包修改JVM默認內(nèi)存問題

    java啟動jar包修改JVM默認內(nèi)存問題

    這篇文章主要介紹了java啟動jar包修改JVM默認內(nèi)存問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • WebSocket無法注入屬性的問題及解決方案

    WebSocket無法注入屬性的問題及解決方案

    這篇文章主要介紹了WebSocket無法注入屬性的問題及解決方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Java發(fā)送post方法詳解

    Java發(fā)送post方法詳解

    這篇文章主要介紹了Java發(fā)送post方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Spring實戰(zhàn)之ResourceLoaderAware加載資源用法示例

    Spring實戰(zhàn)之ResourceLoaderAware加載資源用法示例

    這篇文章主要介紹了Spring實戰(zhàn)之ResourceLoaderAware加載資源用法,結(jié)合實例形式分析了spring使用ResourceLoaderAware加載資源相關(guān)配置與操作技巧,需要的朋友可以參考下
    2020-01-01

最新評論