1 概述
XXL-JOB是一個輕量級分佈式任務調度平臺,開發迅速、學習簡單、輕量級、易擴展。本文演示如何使用快速SpringBoot,搭建XXL-JOB調度平臺。
xxl-job詳細介紹請移至官網http://www.xuxueli.com/xxl-job/#/?id=%E3%80%8A%E5%88%86%E5%B8%83%E5%BC%8F%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E5%B9%B3%E5%8F%B0xxl-job%E3%80%8B2 簡單理解
xxl-job由調度中心和執行器兩部分組成,調度中心負責任務的調度,執行器負責執行任務。調度中心後臺,支持配置任務,控制任務,查看任務運行日誌等功能。
3 本地環境準備
- Java 1.8
- mysql 5.6
- Git 2.16.2
- Maven 3.2.5
- Tomcat 9
- vmware + centos (僅用於分片調度演示)
4 部署調度中心
- 拉取源碼
- 初始化數據庫:
- 修改調度中心數據源配置
- 編譯打包
- 將war包,拷貝至tomcat
- 啟動tomcat
- 訪問控制中心後臺
注意: xxl-job版本已官網最新版本為準
5 單個執行器示例
5.1 添加依賴
com.xuxueli
xxl-job-core
1.9.1
5.2 添加調度中心和執行器配置
xxl:
job:
admin:
### xxl-job admin address list:調度中心部署跟地址:如調度中心集群部署存在多個地址則用逗號分隔。執行器將會使用該地址進行"執行器心跳註冊"和"任務結果回調"。
addresses: http://127.0.0.1:8080/xxl-job-admin-1.9.1
executor:
### xxl-job executor address:執行器"AppName"和地址信息配置:AppName執行器心跳註冊分組依據;地址信息用於"調度中心請求並觸發任務"和"執行器註冊"。
### 執行器默認端口為9999,執行器IP默認為空表示自動獲取IP,多網卡時可手動設置指定IP,手動設置IP時將會綁定Host。單機部署多個執行器時,注意要配置不同執行器端口;
appName: my-xxl-job-executor
ip:
port: 8889
### xxl-job log path:執行器運行日誌文件存儲的磁盤位置,需要對該路徑擁有讀寫權限
logPath: /data/applogs/xxl-job/jobhandler
### xxl-job log retention days:執行器Log文件定期清理功能,指定日誌保存天數,日誌文件過期自動刪除。限制至少保持3天,否則功能不生效;
logRetentionDays: -1
### xxl-job, access token:執行器通訊TOKEN,非空時啟用
accessToken:
server:
port: 8081
5.3 配置執行器
@Slf4j
@Configuration
public class XxlJobConfig {
@Value("${xxl.job.admin.addresses}")
private String addresses;
@Value("${xxl.job.executor.appName}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logPath}")
private String logPath;
@Value("${xxl.job.executor.logRetentionDays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
xxlJobExecutor.setAdminAddresses(addresses);
xxlJobExecutor.setAppName(appName);
xxlJobExecutor.setIp(ip);
xxlJobExecutor.setPort(port);
xxlJobExecutor.setAccessToken(accessToken);
xxlJobExecutor.setLogPath(logPath);
xxlJobExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobExecutor;
}
}
5.4 新建執行器
/**
* 任務Handler示例(Bean模式)
*
*/
@JobHandler(value="demoJobHandler")
@Component
public class DemoJobHandler extends IJobHandler {
@Override
public ReturnTexecute(String param) {
XxlJobLogger.log("XXL-JOB, Hello World.");
return SUCCESS;
}
}
5.5 啟動執行器
執行器會定時到調度中心註冊,上圖說明註冊成功;任務調度中心執行管理菜單中能查詢所有註冊的執行器。
5.6 任務調度中心新增任務
5.7 任務調度中心查看調度日誌
6 多個執行器分片執行示例
6.1 新建分片調度執行器
/**
* 分片廣播任務
*/
@JobHandler(value="shardingJobHandler")
@Component
public class ShardingJobHandler extends IJobHandler {
@Override
public ReturnTexecute(String param) {
// 分片參數
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
XxlJobLogger.log("分片參數:當前分片序號 = {0}, 總分片數 = {1}", shardingVO.getIndex(), shardingVO.getTotal());
// 業務邏輯
for (int i = 0; i < shardingVO.getTotal(); i++) {
if (i == shardingVO.getIndex()) {
XxlJobLogger.log("第 {0} 片, 命中分片開始處理", i);
} else {
XxlJobLogger.log("第 {0} 片, 忽略", i);
}
}
return SUCCESS;
}
}
6.2 虛擬機,本地同時啟動執行器
- 虛擬機中代碼通過git同步更新
- 注意:需要修改虛擬機中,調度中心配置文件,調度中心地址改為本地IP
- 注意:確保本地與虛擬機的網絡環境,保證http協議暢通
- 編譯打包虛擬機代碼:mvn clean package
- 進入目錄:/Chapter3-1-4/target
- 啟動服務:java -jar Chapter3-1-4-1.0-SNAPSHOT.jar
- 啟動後,檢查調度中心執行器是否註冊成功
6.3 任務調度中心新增任務
6.4 任務調度中心查看調度日誌
7 工程目錄
8 結束語
工欲善其事必先利其器,擁抱開源,解放雙手,本文源碼鏈接:
https://github.com/Mkeeper6/SpringBoot-About
閱讀更多 Mkeeper 的文章