全部產品
Search
文件中心

Microservices Engine:將自建XXL-JOB遷移至阿里雲任務調度平台

更新時間:Apr 24, 2025

本文將介紹如何將現有開源的XXL-JOB任務匯入阿里雲任務調度平台中,無需修改任何代碼,即可完成任務的重新部署,實現高效的任務調度和管理。

方案概覽

您可以藉助阿里雲提供的匯出工具,從開源XXL-JOB中直接匯出任務配置,再匯入遷移至雲上執行個體中。大致分為以下步驟:

  1. (可選)CloudMonitor建立警示連絡人:建立警示連絡人,接收系統健康狀態和效能指標的警示資訊。

  2. 提前建立好同名應用:手動建立應用,確保其名稱和開源中AppName一致。

  3. 從自建XXL-JOB匯出資訊:從自建的XXL-JOB系統中匯出任務資訊和配置。

  4. 匯入到阿里雲XXL-JOB:任務資訊和配置匯入阿里雲的XXL-JOB,實現任務資訊和配置資訊的遷移及管理。

  5. 重新部署應用:完成任務匯入後,將XXL-JOB應用的重新部署,接入阿里雲XXL-JOB平台,確保應用能夠接入並正常運行。

步驟一:(可選)CloudMonitor建立警示連絡人

說明

如果您已經有云監控警示連絡人,則可跳過該步驟。

  1. 登入CloudMonitor警示連絡人頁面,建立連絡人,填寫姓名警示通知服務的地區、配置警示資訊(支援手機、郵箱、DingTalk、飛書、企微和Webhook)。

    image

  2. 建立完成後,需要點擊啟用才能使用,如下:

    image

步驟二:提前建立好同名應用

  1. 登入MSE XXL-JOB控制台,並在頂部功能表列選擇地區。

  2. 進入指定XXL-JOB執行個體,在左側導覽列,選擇應用管理,單擊建立應用

  3. 手動建立應用,需保持和開源中的AppName一致。

    image

步驟三:從自建XXL-JOB匯出資訊

目前支援XXL-JOB2.1.1以上所有版本。在匯出時,請選擇相應的版本進行操作。

  1. 下載匯出工具

  2. 解壓工具包,在application.properties檔案中進行匯出配置。

    說明

    建議把CloudMonitor建立的警示連絡人(xxl-job.alarm.users)和警示方式(xxl-job.alarm.channel)在application.properties中進行配置。

    1. 在application.properties設定檔中,配置對應xxl-job任務所在的資料庫資訊。

    2. 在application.properties設定檔中,配置對應要匯出的app-name(該步驟可選,不設定的情況下匯出所有任務分組)。

    image

    ### xxl-job, datasource
    datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    datasource.username=root
    datasource.password=123456
    datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    #匯出任務過濾條件配置項
    #過濾指定任務應用組app-name,多個以","分割(可選,不設定的情況下匯出所有任務分組)
    #xxl-job.filter.app-name=xxl-job-executor-sample1,xxl-job-executor-sample2
    
    #過濾指定任務描述,包含指定字串(可選)
    #xxl-job.filter.job-desc=test
    
    #過濾指定任務作者資訊,包含指定字串 (可選)
    #xxl-job.filter.author=test
    
    #過濾指定觸發狀態的任務配置,不配置時匯出所有狀態任務(可選)
    #xxl-job.filter.trigger-status=0
    
    #分頁讀取:按任務id排序,讀取任務的啟始位置,預設0(可選)
    #xxl-job.filter.page-start=0
    
    #分頁讀取:按任務id排序,讀取任務的啟始位置後多少行記錄,預設無限大(可選)
    #xxl-job.filter.page-size=10
    
    #匯出後任務預設狀態值,0:禁用, 1:啟用,預設為任務原始狀態 (可選)
    #xxl-job.default.job-status=0
    
    #任務警示連絡人CloudMonitor名字,多個以","分割 (可選)
    #xxl-job.alarm.users=張三,李四
    
    #任務警示聯絡通道,sms:簡訊, mail:郵件, phone:電話, webhook:DingTalk/飛書/企業微信,多個以","分割(可選)
    #xxl-job.alarm.channel=sms,mail
  3. 執行./start.sh $version命令運行匯出操作。若不傳入version,預設執行2.2.0版本。

    重要

    如果使用的是2.1.1或者2.1.2版本,也可以使用2.2.0版本匯出。

    # sh start.sh 預設執行2.2.0版本
    sh start.sh 2.3.0

    image

  4. 匯出操作完成後,在目前的目錄下獲得 xxljob_version_*******.json的任務設定檔(僅Bean模式的任務配置資訊)。

    image

    以2.2.0版本為例,匯出格式如下:

    • 最外層結構包括versiontypekindcontent等欄位,其中content為匯出的具體任務內容。

    • content中,以應用app進行劃分,分別匯出各應用下的所有任務;其中每一個元素包括appNamejobConfigInfo兩個欄位。

    • jobConfigInfo是一個數群組類型,其中包括在對應應用下的任務資訊列表,任務資訊欄位包括namejobTypetimeConfig等。

      匯出樣本如下

      {
        "content":[
          {
            "appName":"app2",
            "description":"應用分組2",
            "jobConfigInfo":[
              {
                "attemptInterval":30,
                "contactInfoList":[
                  {
                    "contactType":1,
                    "name":"張三"
                  },
                  {
                    "contactType":1,
                    "name":"李四"
                  }
                ],
                "content":"{\"jobHandler\":\"failJobHandler\"}",
                "description":"test-job04, 負責人:cxy",
                "executeMode":"standalone",
                "jobType":"xxljob",
                "maxAttempt":0,
                "monitorConfigInfo":{
                  "alarmType":"CustomContacts",
                  "sendChannel":"sms,mail",
                  "timeout":10
                },
                "name":"test-job04",
                "parameters":"",
                "routeStrategy":2,
                "status":0,
                "timeConfig":{
                  "dataOffset":0,
                  "timeExpression":"* * * 1 * ?",
                  "timeType":1
                }
              },
              {
                "attemptInterval":30,
                "contactInfoList":[
                  {
                    "contactType":1,
                    "name":"張三"
                  },
                  {
                    "contactType":1,
                    "name":"李四"
                  }
                ],
                "content":"{\"jobHandler\":\"shardingJobHandler\"}",
                "description":"test-job03, 負責人:cxy",
                "executeMode":"broadcast",
                "jobType":"xxljob",
                "maxAttempt":0,
                "monitorConfigInfo":{
                  "alarmType":"CustomContacts",
                  "sendChannel":"sms,mail",
                  "timeout":0
                },
                "name":"test-job03",
                "parameters":"",
                "routeStrategy":8,
                "status":1,
                "timeConfig":{
                  "dataOffset":0,
                  "timeExpression":"* * 18 * * ?",
                  "timeType":1
                }
              }
            ]
          }
        ],
        "kind":"SchedulerXJobs",
        "overwrite":true,
        "type":"JSON",
        "version":"2.0"
      }

步驟四:匯入到阿里雲XXL-JOB

將匯出後的 JSON 檔案直接上傳至阿里雲XXL-JOB,即可輕鬆完成批量任務的匯入。

  1. 登入MSE XXL-JOB控制台,並在頂部功能表列選擇地區。進入指定XXL-JOB執行個體,在左側導覽列,選擇任務管理,單擊匯入任務

    image

    匯入任務表單選項描述:

    • 相同任務:預設為覆蓋,即當匯入的任務在系統中已存在相同任務名時,直接覆蓋原有任務的欄位資訊;若選擇跳過,則跳過已存在的任務,不進行操作。

    • 是否自動建立應用:預設是,即當匯入任務時,若json檔案中的應用在系統中不存在,則自動建立該應用,並將該應用下的所有任務匯入;若選擇否,若系統中不存在對應的應用,則json檔案中該應用下的所有任務都不會匯入。

  2. 選擇匯出的任務設定檔執行匯入,即可完成XXL-JOB任務配置資訊至阿里雲XXL-JOB任務配置資訊同步。

步驟五:重新部署應用

根據您當前使用的 xxl-job-core 用戶端版本,請選擇對應的重啟步驟。

2.1.1及以上版本

完全相容xxl-job-core 用戶端版本2.1.1及以上版本的用戶端協議,只需要通過-D參數重啟應用即可,步驟如下:

  1. 在左側導覽列的應用管理頁面。單擊目標應用操作列下的接入配置

    image

  2. 選擇接入方式2:通過XXL-JOB重啟參數,為應用增加-D參數後,重啟應用。

    image

  3. 接入成功後,在目標執行個體左側導覽列的應用管理頁面,可以看到執行器數量

    image

2.1.0版本

無需修改任何代碼,僅需替換依賴,將pom.xml中的com.xuxueli:xxl-job-core依賴替換為2.1.2即可,業務代碼可以完全相容。替換完成後,請按照2.1.1及以上版本的步驟重新部署應用。

1.x及2.0.x版本

業務代碼無需修改,僅需替換依賴並調整初始化XxlJobExecutor的內容即可,步驟如下:

  1. 修改依賴,將xxl-job-core版本替換為2.1.2。

    <dependency>
      <groupId>com.xuxueli</groupId>
      <artifactId>xxl-job-core</artifactId>
      <version>2.1.2</version>
    </dependency>
  2. XxlJobConfig中初始化XxlJobExecutor的部分,改為XxlJobSpringExecutor

    重要

    @Bean中不需要添加initMethoddestroyMethod

    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppName(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
  3. 按照2.1.1及以上版本步驟重啟應用即可。