XXL-Job 支持多種任務類型,以下是常見任務類型的示例 Demo,包含核心配置和代碼片段,幫助快速理解用法:
一、Bean模式任務(最常用)
通過注解 ?@XxlJob??定義任務方法,直接在 Spring 容器中管理,適合 Java 項目。
1. 配置步驟
- 依賴引入(Maven):
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version> <!-- 最新版本 -->
</dependency>
- 任務代碼:
@Component
public class DemoJobHandler {
? ? // 任務名稱:對應 XXL-Job 控制臺配置的 "JobHandler" 字段
@XxlJob("demoBeanJob")
public ReturnT<String> demoBeanJob(String param) throws Exception {
XxlJobLogger.log("Bean模式任務執行,參數:{}", param);
? ? ? ? // 業務邏輯:例如簡單打印
System.out.println("執行Bean任務,時間:" + new Date());
? ? ? ? return ReturnT.SUCCESS; // 成功標識
}
}
- 控制臺配置:
任務類型選擇“BEAN”,JobHandler 填寫 ?demoBeanJob?,其他參數(如定時規則)按需配置。
二、分片廣播任務(分布式并行處理)
適合大數據量場景,將任務拆分為多個分片,由不同執行器并行處理。
1. 任務代碼
@XxlJob("shardingJob")
public ReturnT<String> shardingJob(String param) throws Exception {
// 獲取分片信息:當前分片索引(0開始)、總分片數
int shardIndex = XxlJobHelper.getShardIndex();
int shardTotal = XxlJobHelper.getShardTotal();
? ? XxlJobLogger.log("分片任務執行:分片索引={}, 總分片數={}", shardIndex, shardTotal);
? ? // 業務邏輯:按分片處理數據(例如處理用戶ID%shardTotal=shardIndex的數據)
for (int userId = 1; userId <= 1000; userId++) {
if (userId % shardTotal == shardIndex) {
System.out.println("處理用戶ID:" + userId);
}
}
? ? return ReturnT.SUCCESS;
}
- 控制臺配置:
任務類型選擇“BEAN”,JobHandler 填寫 ?shardingJob?,并設置“分片總數”(如4),執行器會按分片數并行處理。
三、GLUE模式(Java)
任務代碼直接在 XXL-Job 控制臺編寫(動態腳本),無需重啟服務,適合簡單邏輯或臨時任務。
1. 控制臺配置
- 任務類型選擇“GLUE(Java)”,在“GLUE代碼”編輯器中編寫:
// 繼承IJobHandler
public class GlueJobHandler extends IJobHandler {
@Override
public ReturnT<String> execute(String param) throws Exception {
XxlJobLogger.log("GLUE模式任務執行,參數:{}", param);
System.out.println("動態腳本執行,時間:" + new Date());
return ReturnT.SUCCESS;
}
}
- 保存后直接觸發,代碼實時生效。
四、命令行任務
執行系統命令(如腳本、程序),適合跨語言場景。
1. 控制臺配置
- 任務類型選擇“COMMAND”,“JobHandler”填寫命令內容:
# 示例:執行shell腳本
/home/xxl-job/demo.sh "param1"
- 腳本內容(?demo.sh?):
echo "命令行任務執行,參數:$1,時間:$(date)"
五、任務依賴示例
通過“子任務ID”配置任務依賴,實現“任務A執行完再執行任務B”。
1. 配置步驟
- 在任務B的“子任務ID”中填寫任務A的ID(多個用逗號分隔)。
- 任務A代碼:
@XxlJob("parentJob")
public ReturnT<String> parentJob(String param) {
XxlJobLogger.log("父任務執行完成");
return ReturnT.SUCCESS;
}
- 任務B代碼:
@XxlJob("childJob")
public ReturnT<String> childJob(String param) {
XxlJobLogger.log("子任務執行(依賴父任務完成)");
return ReturnT.SUCCESS;
}
關鍵說明
- 日志查看:通過 ?XxlJobLogger.log()??輸出的日志,可在 XXL-Job 控制臺“任務日志”中查看。
- 失敗處理:任務返回 ?ReturnT.FAIL??時,控制臺會標記失敗,可配置重試次數。
- 參數傳遞:控制臺配置的“執行參數”會作為 ?param??傳入任務方法。
以上示例覆蓋了日常開發中最常用的任務類型,可根據實際業務場景(如定時對賬、數據同步)調整邏輯。
?