兩個任務同一個調用時間 CRON:0 0 3 * * ?,具體如何調度的,及任務如何執行的

xxLjob兩個任務 pullGuanjiaSalesJob,不同的執行參數,配置了同一個 @XxlJob("pullGuanjiaSalesJob")兩個任務同一個調用時間 CRON:0 0 3 * * ?,具體如何調度的,及任務如何執行的

在 XXL-JOB 中,當兩個任務配置了相同的?@XxlJob("pullGuanjiaSalesJob")?方法且 CRON 表達式相同(如?0 0 3 * * ?,即每天凌晨3點觸發),其調度和執行流程如下:


1. 調度中心的觸發機制

(1) 任務存儲與觸發檢查
  • XXL-JOB Admin(調度中心)?會定期掃描任務表(默認每秒一次),檢查到達觸發時間的任務。

  • 如果兩個任務的 CRON 表達式均為?0 0 3 * * ?,調度中心會在?同一時間點(3:00:00)?生成兩條任務觸發記錄。

(2) 任務觸發順序
  • 默認并發觸發
    調度中心會?同時?向執行器發送兩個任務的觸發請求(即使?jobHandler?相同),但會攜帶不同的?jobId?和參數(如?param=type=daily?和?param=type=monthly)。

  • 阻塞策略影響
    如果任務配置了?SERIAL_EXECUTION(串行執行),調度中心會按任務ID順序依次觸發(前一個任務執行完成后,再觸發下一個)。


2. 執行器的任務執行

(1) 任務分發到執行器
  • 調度中心通過 RPC 調用執行器(Executor),傳遞以下信息:

    • jobHandlerpullGuanjiaSalesJob(兩個任務相同)。

    • jobParam:任務參數(如?type=daily?和?type=monthly)。

    • jobId:任務唯一ID(區分不同任務實例)。

  • 執行器會根據?jobId?和?jobParam?區分任務,即使?jobHandler?相同。

(2) 執行器線程池處理
  • 執行器接收到任務后,會提交到內置的線程池(默認核心線程數為?8)。

    • 默認并發執行:兩個任務會由不同線程同時執行。

    • 串行執行:如果配置了?SERIAL_EXECUTION,則任務會排隊依次執行。

(3) 任務方法執行

java

@XxlJob("pullGuanjiaSalesJob")
public ReturnT<String> pullGuanjiaSalesJob(String param) {if ("type=daily".equals(param)) {// 執行每日統計邏輯} else if ("type=monthly".equals(param)) {// 執行月度統計邏輯}return ReturnT.SUCCESS;
}
  • 通過?param?區分不同任務的業務邏輯。


3. 關鍵影響因素

(1) 阻塞策略(Block Strategy)
策略對相同?jobHandler?任務的影響
SERIAL_EXECUTION串行執行(按任務ID順序,前一個完成后再觸發下一個)。
DISCARD_LATER丟棄后續觸發,只執行第一個到達的任務。
COVER_EARLY覆蓋早期觸發,只執行最新的一個任務。
(2) 執行器線程池配置
  • 線程池大小通過?xxl.job.executor.corePoolSize?配置(默認8)。

    • 若線程池已滿,新任務會等待或丟棄(取決于配置)。


4. 執行流程示例

場景描述
  • 任務1jobId=1param=type=daily,阻塞策略為?SERIAL_EXECUTION

  • 任務2jobId=2param=type=monthly,阻塞策略為?SERIAL_EXECUTION

執行步驟
  1. 調度中心?在 3:00:00 同時檢測到兩個任務需觸發。

  2. 由于?jobHandler?相同且阻塞策略為?SERIAL_EXECUTION,調度中心按?jobId?順序觸發:

    • 先觸發?jobId=1type=daily),等待其執行完成。

    • 完成后觸發?jobId=2type=monthly)。

  3. 執行器依次運行兩個任務,通過?param?區分邏輯。


5. 如何避免問題?

(1) 確保參數可區分邏輯
  • 在?@XxlJob?方法內明確解析?param,避免邏輯沖突。

  • 示例:

    java

    @XxlJob("pullGuanjiaSalesJob")
    public ReturnT<String> execute(String param) {if (param == null) {return ReturnT.FAIL;}switch (param) {case "type=daily":// 每日邏輯break;case "type=monthly":// 月度邏輯break;}return ReturnT.SUCCESS;
    }
(2) 調整阻塞策略
  • 若任務需嚴格串行,配置?SERIAL_EXECUTION

  • 若允許并發,但需避免資源競爭,可在代碼中加鎖:

    java

    private final Object lock = new Object();@XxlJob("pullGuanjiaSalesJob")
    public ReturnT<String> execute(String param) {synchronized (lock) {// 業務邏輯}return ReturnT.SUCCESS;
    }
(3) 監控與日志
  • 在任務日志中記錄?jobId?和?param,便于排查問題:

    java

    @XxlJob("pullGuanjiaSalesJob")
    public ReturnT<String> execute(String param) {log.info("Job started: jobId={}, param={}", XxlJobHelper.getJobId(), param);// 業務邏輯return ReturnT.SUCCESS;
    }

6. 總結

  • 調度機制:相同 CRON 的任務會同時觸發,但執行順序受阻塞策略控制。

  • 執行邏輯:通過?jobParam?區分任務,由執行器線程池并發或串行執行。

  • 最佳實踐

    • 使用參數明確區分任務邏輯。

    • 關鍵任務配置?SERIAL_EXECUTION?避免并發問題。

    • 監控日志確保任務按預期執行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94404.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94404.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94404.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【基于WAF的Web安全測試:繞過Cloudflare/Aliyun防護策略】

當Cloudflare或阿里云WAF矗立在Web應用前端&#xff0c;它們如同智能護盾&#xff0c;過濾惡意流量。然而&#xff0c;真正的Web安全測試不止于驗證防護存在&#xff0c;更需挑戰其邊界——理解并模擬攻擊者如何繞過這些先進防護&#xff0c;才能暴露深藏的風險。這不是鼓勵攻擊…

使用YOLOv8-gpu訓練自己的數據集并預測

本篇將教學使用示例代碼訓練自己的數據集&#xff08;train&#xff09;以及預測&#xff08;predict&#xff09;。 目錄 一、代碼獲取 二、訓練 1、添加自己的訓練集 2、創建訓練集設置文件 3、 修改訓練代碼中數據集設置文件 4、開始訓練 三、預測 1、 修改圖片路徑…

Transformer的并行計算與長序列處理瓶頸

Transformer相比RNN&#xff08;循環神經網絡&#xff09;的核心優勢之一是天然支持并行計算&#xff0c;這源于其自注意力機制和網絡結構的設計.并行計算能力和長序列處理瓶頸是其架構特性的兩個關鍵表現&#xff1a; 并行計算&#xff1a;指 Transformer 在訓練 / 推理時通過…

LightRAG:大模型時代的低成本檢索利器

LightRAG&#xff1a;大模型時代的低成本檢索利器 大模型浪潮下&#xff0c;RAG 技術的困境與曙光 在科技飛速發展的當下&#xff0c;大語言模型&#xff08;LLMs&#xff09;已成為人工智能領域的璀璨明星。從最初驚艷世人的 GPT-3&#xff0c;到如今功能愈發強大的 GPT-4&…

spring boot開發中的資源處理等問題

文章目錄一、RESTful 風格二、Spring Boot 靜態資源處理三、Spring Boot 首頁&#xff08;歡迎頁&#xff09;四、PathVariable 注解五、攔截器&#xff08;Interceptor&#xff09;六、過濾器&#xff08;Filter&#xff09;七、觸發器&#xff08;Trigger&#xff09;八、Han…

[2025CVPR-圖象生成方向]ODA-GAN:由弱監督學習輔助的正交解耦比對GAN 虛擬免疫組織化學染色

?研究背景與挑戰? ?臨床需求? 組織學染色(如H&E和IHC)是病理診斷的核心技術,但IHC染色存在耗時、組織消耗大、圖像未對齊等問題。 虛擬染色技術可通過生成模型將H&E圖像轉換為IHC圖像,但現有方法面臨兩大挑戰: ?染色不真實性?:生成圖像與真實IHC的分布存在…

【Leetcode】2106. 摘水果

文章目錄題目思路代碼CJavaPython復雜度分析時間復雜度空間復雜度結果總結題目 題目鏈接&#x1f517; 在一個無限的 x 坐標軸上&#xff0c;有許多水果分布在其中某些位置。給你一個二維整數數組 fruits &#xff0c;其中 fruits[i] [positioni, amounti] 表示共有 amounti…

(CVPR 2024)SLAM卷不動了,機器人還有哪些方向能做?

關注gongzhonghao【CVPR頂會精選】眾所周知&#xff0c;機器人因復雜環境適應性差、硬件部署成本高&#xff0c;對高效泛化一直需求迫切。再加上多傳感器協同難題、真實場景數據獲取不易&#xff0c;當下對遷移學習 機器人智能融合的研究也就更熱烈了。不過顯然&#xff0c;這…

Go語言 延 遲 語 句

延遲語句&#xff08;defer&#xff09;是Go 語言里一個非常有用的關鍵字&#xff0c;它能把資源的釋放語句與申請語句放到距離相近的位置&#xff0c;從而減少了資源泄漏的情況發生。延遲語句是什么defer 是Go 語言提供的一種用于注冊延遲調用的機制&#xff1a;讓函數或語句可…

【go 】數組的多種初始化方式與操作

在 Go 語言中&#xff0c;數組是一種固定長度的數據結構&#xff0c;用于存儲相同類型的元素。以下是 Go 中數組的多種初始化方式&#xff0c;結合搜索結果整理如下&#xff1a; &#xff08;一&#xff09;使用 var 關鍵字聲明并初始化數組 使用 var 關鍵字聲明數組時&#xf…

基于Java+MySQL 實現(Web)網上商城

悅桔拉拉商城1. 課設目的可以鞏固自己之前所學的知識&#xff0c;以及學習更多的新知識。可以掌握業務流程&#xff0c;學習工作的流程。2. 開發環境硬件環境&#xff1a;Window11 電腦、Centos7.6 服務器軟件環境&#xff1a;IntelliJ IDEA 2021.1.3 開發工具JDK 16 運行環境M…

高并發搶單系統核心實現詳解:Redisson分布式鎖實戰

一、方法整體流程解析 #mermaid-svg-MROZ2xF7WaNPaztA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MROZ2xF7WaNPaztA .error-icon{fill:#552222;}#mermaid-svg-MROZ2xF7WaNPaztA .error-text{fill:#552222;strok…

Android12 User版本開啟adb root, adb remount, su, 關閉selinux

開啟adb root 直接看adb源碼&#xff1a; __android_log_is_debuggable就是判斷ro.debuggable屬性值&#xff0c;感興趣可以在 源碼下grep下實現看看。auth_required :在adb源碼下定義的全局變量&#xff0c;默認等于true,。看名字就是是否需要用戶授權的flag, 這里不再繼續跟…

金融專業高分簡歷撰寫指南

一、金融求職簡歷原則&#xff1a;深度與亮點并存在金融行業求職時&#xff0c;一份出色的簡歷需突出經歷深度與亮點。01 教育背景需如實填寫畢業院校、專業、GPA及所學課程。金融行業不少公司對求職者學校和學歷有嚴格標準&#xff0c;如“985”“211”院校或碩士以上學歷等。…

專題:2025生命科學與生物制藥全景報告:產業圖譜、投資方向及策略洞察|附130+份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p43526 過去一年&#xff0c;全球生命科學VC融資回暖至1021.5億美元&#xff0c;并購交易雖下滑23%卻聚焦關鍵賽道&#xff0c;創新藥管線中GLP-1受體激動劑以170億美元市場規模領跑&#xff0c;AI技術將研發周期縮短60%……這些數據背…

Compose筆記(四十)--ClickableText

這一節主要了解一下Compose中的ClickableText&#xff0c;在Jetpack Compose中&#xff0c;ClickableText是用于創建可點擊文本的組件&#xff0c;其核心功能是通過聲明式語法將文本設置為交互式元素&#xff0c;用戶點擊時可觸發特定操作。簡單總結如下:API含義 text&#xff…

面試必刷的數組三連:原地刪除與合并

堅持用 清晰易懂的圖解 多語言代碼&#xff0c;讓每道題變得簡單&#xff01; 呆頭個人主頁詳情 呆頭個人Gitee代碼倉庫 呆頭詳細專欄系列 座右銘&#xff1a; “不患無位&#xff0c;患所以立。” 面試必刷的數組三連&#xff1a;原地刪除與合并前言目錄1.移除元素2.刪除有序…

力扣經典算法篇-41-旋轉圖像(輔助數組法,原地旋轉法)

1、題干 給定一個 n n 的二維矩陣 matrix 表示一個圖像。請你將圖像順時針旋轉 90 度。 你必須在 原地 旋轉圖像&#xff0c;這意味著你需要直接修改輸入的二維矩陣。請不要 使用另一個矩陣來旋轉圖像。 示例 1&#xff1a;輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]…

譯|用戶增長策略如何使用因果機器學習的案例

來自上傳文件中的文章《[Causal Machine Learning for Growth: Loyalty Programs, LTV, and What to Do When You Can’t Experiment | by Torty Sivill | Towards AI]》 本文探討了當 A/B 測試不可行時&#xff0c;如何利用因果推斷從歷史數據中獲取洞察。技術亮點在于通過構建…

java~final關鍵字

final關鍵字final基本介紹final的使用細節final基本介紹 final是最終的意思&#xff0c;可以修飾類&#xff0c;屬性&#xff0c;方法&#xff0c;局部變量什么時候會要使用到final呢&#xff1f; 1.想要類不被繼承時 2.不希望類的某個屬性的值被改變時 3.不想父類的某個方法被…