成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實現定時任務的六種策略

開發 前端
ScheduleExecutorService 因其簡單易用且性能優異,在各大開源中間件項目(比如 RocketMQ、MetaQ、Canal 等)中被廣泛的使用。

這篇文章,我們聊聊實現定時任務的六種策略。

圖片圖片

1 自定義單線程

圖片圖片

上圖中,我們啟動一個線程,該線程無限循環執行,每隔20毫秒執行業務代碼。

這種方式非常簡單易用,在很多中間件中得到廣泛應用。

2 JDK ScheduledExecutorService

ScheduledExecutorService 是 Java 標準庫提供的一個用于調度定時任務的接口。它提供了一種相對簡單的方式來執行定時任務,不需要引入額外的庫。

圖片圖片

在上述例子中:

  1. 創建了一個ScheduledExecutorService 實例,它使用了一個線程池,其中包含一個線程用于執行定時任務。
  2. 定義了一個簡單的Runnable任務,輸出當前時間。
  3. 使用scheduleAtFixedRate方法安排任務,指定了任務的啟動延遲時間和執行間隔時間。
  4. 主線程等待一段時間,然后關閉ScheduledExecutorService,確保定時任務不再執行。

這是一個基本的使用例子,你可以根據需求調整延遲時間、執行間隔、線程池大小等參數。

ScheduleExecutorService 因其簡單易用且性能優異,在各大開源中間件項目(比如 RocketMQ、MetaQ、Canal 等)中被廣泛的使用。

3 Spring Task

在Spring框架中,你可以使用@Scheduled注解來創建定時任務。以下是Spring定時任務的基本用法:

  1. 配置類: 創建一個配置類,通常使用 @EnableScheduling 注解啟用 Spring 的定時任務功能。

圖片圖片

  1. 定時任務方法: 在你的服務類或組件類中創建一個方法,并使用 @Scheduled 注解來指定定時任務的觸發條件。

圖片圖片

在上述例子中,@Scheduled 注解允許你指定定時任務的執行規則,可以是固定頻率(fixedRate)、固定延遲(fixedDelay)、或者使用cron表達式。

4 Quartz

Quartz是一款 Java 開源任務調度框架。

圖片圖片

下面我們展示如何使用:

1、添加依賴

圖片圖片

2、Job(任務:你要做什么事)

圖片圖片

3、Trigger(觸發器:什么時候去做)

4、scheduler(任務調度:你什么時候需要做什么事)將 job 與 Trigger 進行整合。

下面是一個例子:

圖片圖片

這里需要強調的是,Quartz 支持集群模式,持久化方式是 JDBC ,需要創建如下表。

圖片圖片

Quartz 集群模式對于業務數據庫有侵入性,需要考慮業務場景慎重使用。

5 elastic-job

ElasticJob 定位為輕量級無中心化解決方案,使用 jar 的形式提供分布式任務的協調服務。

圖片圖片

應用內部定義任務類,實現 SimpleJob 接口,編寫自己任務的實際業務流程即可。

圖片圖片

舉例:應用A有五個任務需要執行,分別是A,B,C,D,E。任務E需要分成四個子任務,應用部署在兩臺機器上。

圖片圖片

應用A在啟動后, 5個任務通過 Zookeeper 協調后被分配到兩臺機器上,通過Quartz Scheduler 分開執行不同的任務。

ElasticJob 從本質上來講 ,底層任務調度還是通過 Quartz ,相比Redis分布式鎖 或者 Quartz 分布式部署 ,它的優勢在于可以依賴 Zookeeper 這個大殺器 ,將任務通過負載均衡算法分配給應用內的 Quartz Scheduler容器。

6 xxl-job

XXL-JOB 是一個使用最廣泛的分布式任務調度平臺。

業務系統和調度平臺分開部署,我們在調度平臺上配置應用以及其定時任務,當任務需要執行時,調度平臺會觸發業務系統的任務,業務系統執行完任務之后,反饋給調度平臺任務執行的結果。

接下來,我們使用 xxl-job 開發第一個任務 “Hello World”。

1、新建任務:

登錄調度中心,點擊下圖所示“新建任務”按鈕,新建示例任務。然后,參考下面截圖中任務的參數配置,點擊保存。

圖片圖片

圖片圖片

2、應用任務開發

圖片圖片

3、觸發執行

請點擊任務右側 “執行” 按鈕,可手動觸發一次任務執行(通常情況下,通過配置Cron表達式進行任務調度觸發)。

4、查看日志

請點擊任務右側 “日志” 按鈕,可前往任務日志界面查看任務日志。在任務日志界面中,可查看該任務的歷史調度記錄以及每一次調度的任務調度信息、執行參數和執行信息。

運行中的任務點擊右側的“執行日志”按鈕,可進入日志控制臺查看實時執行日志。

圖片圖片

7 寫到最后

本文整理了實現定時任務的六種策略,我們需要根據實際場景選擇合適的策略。

同時,我們也需要考慮:

  1. 是否需要任務應用集群部署;
  2. 集群部署下假如出現并發執行,業務是否會出現異常;
  3. 如何規避并發執行導致的業務異常。
責任編輯:武曉燕 來源: 勇哥Java實戰
相關推薦

2024-02-26 11:12:33

定時任務線程

2021-11-22 12:35:40

Python命令定時任務

2024-01-31 08:38:57

Python定時任務函數

2022-06-01 23:30:04

漏洞網絡安全移動攻擊

2024-11-11 06:20:00

緩存開發

2025-03-12 09:54:02

2021-12-10 13:08:31

數據倉庫BI數據存儲

2011-03-31 14:53:13

數據中心節能

2021-06-30 07:19:34

SpringBoot定時任務

2023-12-19 08:09:06

Python定時任務Cron表達式

2024-11-04 16:01:01

2021-08-05 07:28:25

Java實現方式

2020-12-21 07:31:23

實現單機JDK

2024-12-27 08:24:55

2022-12-13 10:05:27

定時任務任務調度操作系統

2021-09-26 09:17:01

Python命令定時任務

2024-09-20 05:49:04

SpringBoot后端

2019-09-12 09:22:58

Nginx負載均衡服務器

2024-05-31 13:07:29

.NET Core定時任務編程

2024-11-20 15:24:49

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天堂在线www| 日韩三级视频 | 精品国产欧美日韩不卡在线观看 | 拍真实国产伦偷精品 | 欧美激情精品久久久久久变态 | 91在线网 | 国产一区久久 | 涩爱av一区二区三区 | 精精精精xxxx免费视频 | 一区二区在线免费观看 | 欧美在线亚洲 | 亚洲欧美综合精品另类天天更新 | 色视频一区二区 | 久久一区二区视频 | 国产成人精品久久二区二区91 | 在线观看h视频 | www312aⅴ欧美在线看 | 亚洲日日 | 中文字幕在线观看一区二区 | 亚洲成a人片| 日韩视频在线播放 | 亚洲高清av在线 | 欧美一二三 | 国产欧美视频一区二区三区 | 国产精品久久精品 | www久久久| 色婷婷综合网 | 欧美精品久久久 | 超碰91在线| 卡通动漫第一页 | 国产一区二区三区四区 | 蜜桃精品在线 | 懂色中文一区二区三区在线视频 | 日日骑| 欧美国产视频一区二区 | 久久久久久久97 | 亚洲成人综合在线 | 综合国产 | 欧美三级电影在线播放 | 久久久国产精品 | av国产精品|