将自建XXL-JOB迁移至阿里云任务调度平台

更新时间:2025-02-28 05:46:48

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

视频演示

如需将现有开源的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. 登录MSE XXL-JOB控制台,并在顶部菜单栏选择地域。

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

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

    image

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

目前支持XXL-JOB2.1.1以上所有版本。在导出时,请选择相应的版本进行操作。

  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版本。

    重要

    如果使用的是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及以上版本
2.0.x及2.1.0版本
1.x版本

完全兼容xxl-job-core 客户端版本2.1.1及以上版本的客户端协议,只需要通过-D参数重启应用即可,步骤如下:

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

    image

  2. 选择接入方式2:通过XXL-JOB重启参数,为应用增加-D参数后,重启应用。

    image

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

    image

无需修改任何代码,仅需替换依赖,将pom.xml中的com.xuxueli:xxl-job-core依赖替换为2.1.2即可,业务代码可以完全兼容。替换完成后,请按照2.1.1及以上版本的步骤重新部署应用。

业务代码无需修改,仅需替换依赖并调整初始化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
    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及以上版本步骤节重启应用即可。

  • 本页导读 (1)
  • 视频演示
  • 方案概览
  • 步骤一:(可选)云监控创建报警联系人
  • 步骤二:提前创建好同名应用
  • 步骤三:从自建XXL-JOB导出信息
  • 步骤四:导入到阿里云XXL-JOB
  • 步骤五:重新部署应用