将自建XXLJOB迁移至阿里云任务调度平台

更新时间:

本文将介绍如何将现有开源的XXL-JOB任务导入阿里云任务调度平台中,无需修改任何代码,即可完成任务的重新部署,实现高效的任务调度和管理。

方案概览

您可以借助阿里云提供的导出工具,从开源XXL-JOB中直接导出任务配置,再导入迁移至云上实例中。大致分为以下步骤:

  1. (可选)云监控创建报警联系人:创建报警联系人,接收系统健康状态和性能指标的报警信息。

  2. 提前创建好同名应用:手动创建应用,确保其名称和开源中AppName一致。

  3. 从自建XXL-JOB导出信息:从自建的XXL-JOB系统中导出任务信息和配置。

  4. 导入到阿里云XXL-JOB:任务信息和配置导入阿里云的XXL-JOB,实现任务信息和配置信息的迁移及管理。

  5. 重新部署应用:完成任务导入后,将XXL-JOB应用的重新部署,接入阿里云XXL-JOB平台,确保应用能够接入并正常运行。

步骤一:(可选)云监控创建报警联系人

说明

如果您已经有云监控报警联系人,则可跳过该步骤。

  1. 登录云监控报警联系人页面,创建联系人,填写姓名报警通知服务的区域、配置报警信息(支持手机、邮箱、钉钉、飞书、企微和Webhook)。

    image

  2. 创建完成后,需要点击激活才能使用,如下:

    image

步骤二:提前创建好同名应用

  1. 登录XXL-JOB控制台,并在顶部菜单栏选择地域。

  2. 进入指定XXL-JOB实例,在左侧菜单栏,选择应用管理,单击创建应用

  3. 手动创建应用,需保持和开源中的AppName一致。

    image

步骤三:从自建XXL-JOB导出信息

目前支持XXL-JOB2.2.x2.3.x2.4.x三个版本。在导出时,请选择相应的版本进行操作。

  1. 下载导出工具

  2. 解压工具包,在application.properties文件中进行导出配置。

    说明

    建议把云监控创建的报警联系人(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
    
    #任务报警联系人云监控名字,多个以","分割 (可选)
    #xxl-job.alarm.users=张三,李四
    
    #任务报警联系通道,sms:短信, mail:邮件, phone:电话, webhook:钉钉/飞书/企业微信,多个以","分割(可选)
    #xxl-job.alarm.channel=sms,mail
  3. 执行./start.sh $version命令运行导出操作。若不传入version,默认执行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. 登录XXL-JOB控制台,并在顶部菜单栏选择地域。进入指定XXL-JOB实例,在左侧菜单栏,选择任务管理,单击导入任务

    image

    导入任务表单选项描述:

    • 相同任务:默认为覆盖,即当导入的任务在系统中已存在相同任务名时,直接覆盖原有任务的字段信息;若选择跳过,则跳过已存在的任务,不进行操作。

    • 是否自动创建应用:默认是,即当导入任务时,若json文件中的应用在系统中不存在,则自动创建该应用,并将该应用下的所有任务导入;若选择否,若系统中不存在对应的应用,则json文件中该应用下的所有任务都不会导入。

  2. 选择导出的任务配置文件执行导入,即可完成XXL-JOB任务配置信息至阿里云XXL-JOB任务配置信息同步。

步骤五:重新部署应用

  1. 在左侧导航栏的应用管理页面,单击目标应用操作列的接入配置

  2. 按照接入方式2:通过-D参数重启应用(不需要修改代码和配置文件),启动XXL-JOB应用时,通过启动命令增加-D参数的形式,重启应用。

    image

  3. 接入成功后,在左侧导航栏的应用管理页面,可以看到执行器数量。

    image