SpringBoot基礎教程3-1-4 xxl-job快速整合

1 概述

XXL-JOB是一個輕量級分佈式任務調度平臺,開發迅速、學習簡單、輕量級、易擴展。本文演示如何使用快速SpringBoot,搭建XXL-JOB調度平臺。java

xxl-job詳細介紹請移至官網mysql

2 簡單理解

xxl-job調度中心執行器兩部分組成,調度中心負責任務的調度,執行器負責執行任務。調度中心後臺,支持配置任務,控制任務,查看任務運行日誌等功能。git

3 本地環境準備

  • Java 1.8
  • mysql 5.6
  • Git 2.16.2
  • Maven 3.2.5
  • Tomcat 9
  • vmware + centos (僅用於分片調度演示)

4 部署調度中心

  • 拉取源碼

git clone git@github.com:xuxueli/xxl-job.gitgithub

  • 初始化數據庫:

目錄:/xxl-job/doc/db/tables_xxl_job.sqlweb

  • 修改調度中心數據源配置

目錄:/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.propertiessql

  • 編譯打包

cd /xxl-job/xxl-job\xxl-job-admin mvn clean pacakge數據庫

  • war包,拷貝至tomcat

war所在目錄:/xxl-job/xxl-job\xxl-job-admin/target tomcat部署目錄:/apache-tomcat-9.0.12/webappsapache

  • 啓動tomcat

運行/apache-tomcat-9.0.12/bin目錄下的startup.batcentos

  • 訪問控制中心後臺

http://localhost:8080/xxl-job-admin-1.9.1/tomcat

注意xxl-job版本已官網最新版本爲準

5 單個執行器示例

5.1 添加依賴

<!-- xxl-job-core -->
<dependency>
	<groupId>com.xuxueli</groupId>
	<artifactId>xxl-job-core</artifactId>
	<version>1.9.1</version>
</dependency>

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 ReturnT<String> execute(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 ReturnT<String> execute(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](/SpringBoot基礎教程3-1-4 xxl-job快速整合/6.png)

6.3 任務調度中心新增任務

6.4 任務調度中心查看調度日誌

7 工程目錄

8 結束語

工欲善其事必先利其器,擁抱開源,解放雙手,本文源碼


歡迎關注博主公衆號,第一時間推送最新文章

歡迎關注博主公衆號

相關文章
相關標籤/搜索