您可以使用SchedulerX 2.0为您在部署在非EDAS(阿里云或本地) 上的独立Java应用、Spring或Spring Boot应用实现分布式任务调度能力。

前提条件

由于SchedulerX是EDAS的组件,所以在使用SchedulerX为应用接入任务调度能力前,需要先在EDAS完成以下工作:

  • 开通EDAS服务,并在组件中心中开通分布式任务调度2.0(免费)。
  • 创建命名空间(可选),具体操作步骤,请参见创建命名空间

操作流程

应用接入任务调度能力的流程如下:

  1. 在EDAS控制台创建任务调度分组。
  2. 为应用接入任务调度。
  3. 将应用部署到阿里云。

创建任务调度分组

您需要首先为应用创建任务调度分组。该分组的Group ID将作为应用接入任务调度的配置参数。

  1. 登录EDAS控制台
  2. 在左侧导航栏中选择组件中心 > 分布式任务调度2.0
  3. 分布式任务调度2.0左侧导航栏选择应用管理
  4. 应用管理页面选择地域命名空间,然后单击创建
    命名空间
  5. 创建应用分组对话框的应用名右侧的下拉列表中选择应用,在Group ID右侧的文本框中输入应用分组名称,然后单击确定

    GroupId建议取一个有业务含义的,例如tmall.order。Group ID要求在当前命名空间内唯一,否则将创建失败。

    创建应用分组

    创建完成后,自动返回应用管理页面,在应用列表中查看应用分组是否已存在。

    下面配置的Namespace指的是任务调度系统的命名空间列表的命名空间ID。

    命名空间

为应用接入任务调度

您需要在应用程序中接入任务调度,主要包含以下2步:

  1. 初始化SchedulerxWorker。
  2. 新建实现任务调度的类。
  1. 初始化SchedulerxWorker

    针对不同应用,在初始化SchedulerxWorker的时候会有所区别,下面分别说明:

    • 独立Java应用
      1. 在应用程序的pom.xml文件中添加SchedulerxWorker依赖。

        schedulerx2.version请使用客户端版本说明中最新客户端版本。

        <dependency>
        <groupId>com.aliyun.schedulerx</groupId>
        <artifactId>schedulerx2-worker</artifactId>
        <version>${schedulerx2.version}</version>
        </dependency>                   
      2. 在main函数中初始化SchedulerxWorker。

        初始化SchedulerxWorker时,会用到您部署应用的地域(Region)和对应的Endpoint。它们的关系如下表所示。

        region endpoint
        华东1(杭州) addr-hz-internal.edas.aliyun.com
        华东2(上海) addr-sh-internal.edas.aliyun.com
        华北2(北京) addr-bj-internal.edas.aliyun.com
        华北3(张家口) addr-cn-zhangjiakou-internal.edas.aliyun.com
        华南1(深圳) addr-sz-internal.edas.aliyun.com
        美国(弗吉尼亚) addr-us-east-1-internal.acm.aliyun.com
        测试(华东1) acm.aliyun.com
        private static void initSchedulerxWorker() throws Exception {
            SchedulerxWorker schedulerxWorker = new SchedulerxWorker();
            schedulerxWorker.setEndpoint("xxxx");
            schedulerxWorker.setNamespace("xxxx");
            schedulerxWorker.setGroupId("xxxx");
            schedulerxWorker.setAliyunAccessKey("xxxx");
            schedulerxWorker.setAliyunSecretKey("xxxx");
            schedulerxWorker.init();
        }                           
        说明
        • 一个应用如果有不止一个业务,或者想把定时任务进行归类,可以建立多个分组。例如应用名是animals,新建两个分组animals.dogsanimals.cats。此时不用申请两批实例分别接入2个分组,一个应用可以同时接入2个分组,在客户端中将这2个分组配置到groupId=后面,如groupId=animals.dogs,animals.cats即可。

        • 在初始化SchedulerxWorker客户端时,根据实际业务,如果还有其它配置需求,请参见SchedulerxWorker配置参数说明增加配置。

    • Spring应用
      1. 在应用程序的pom.xml文件中添加SchedulerxWorker依赖。

        schedulerx2.version请使用客户端版本说明中最新客户端版本。

        <dependency>
        <groupId>com.aliyun.schedulerx</groupId>
        <artifactId>schedulerx2-worker</artifactId>
        <version>${schedulerx2.version}</version>
        </dependency>                    
      2. 在xml配置文件中初始化SchedulerxWorker(注入Bean)。

        初始化SchedulerxWorker时,会用到您部署应用的地域(Region)和对应的Endpoint。它们的关系如下表所示。

        region endpoint
        华东1(杭州) addr-hz-internal.edas.aliyun.com
        华东2(上海) addr-sh-internal.edas.aliyun.com
        华北2(北京) addr-bj-internal.edas.aliyun.com
        华北3(张家口) addr-cn-zhangjiakou-internal.edas.aliyun.com
        华南1(深圳) addr-sz-internal.edas.aliyun.com
        美国(弗吉尼亚) addr-us-east-1-internal.acm.aliyun.com
        测试(华东1) acm.aliyun.com
        <bean id="schedulerxWorker" class="com.alibaba.schedulerx.worker.SchedulerxWorker">
            <property name="endpoint">
              <value>${endpoint}</value>
            </property>
            <property name="namespace">
              <value>${namespace}</value>
            </property>
            //填写之前创建的分组的Group ID。可以配置多个分组,以英文逗号(,)分隔。
            <property name="groupId">
              <value>${groupId}</value>
            </property>
            <property name="aliyunAccessKey">
              <value>${aliyunAccessKey}</value>
            </property>
            <property name="aliyunSecretKey">
              <value>${aliyunSecretKey}</value>
            </property>
        </bean>          
    • Spring Boot应用
      1. 在应用程序的pom.xml文件中添加SchedulerxWorker依赖。

        schedulerx2.version请使用客户端版本说明中最新客户端版本。

        <dependency>
        <groupId>com.aliyun.schedulerx</groupId>
        <artifactId>schedulerx2-spring-boot-starter</artifactId>
        <version>${schedulerx2.version}</version>
        </dependency>                   
      2. 初始化SchedulerxWorker。

        初始化SchedulerxWorker时,会用到您部署应用的地域(Region)和对应的Endpoint。它们的关系如下表所示。

        region endpoint
        华东1(杭州) addr-hz-internal.edas.aliyun.com
        华东2(上海) addr-sh-internal.edas.aliyun.com
        华北2(北京) addr-bj-internal.edas.aliyun.com
        华北3(张家口) addr-cn-zhangjiakou-internal.edas.aliyun.com
        华南1(深圳) addr-sz-internal.edas.aliyun.com
        美国(弗吉尼亚) addr-us-east-1-internal.acm.aliyun.com
        测试(华东1) acm.aliyun.com

        application.properties文件中添加之前创建的任务分组的Group ID。

        spring.schedulerx2.endpoint=${endpoint}
        spring.schedulerx2.namespace=${namespace}
        spring.schedulerx2.groupId=${groupId}
        spring.schedulerx2.aliyunAccessKey=${aliyunAccessKey}
        spring.schedulerx2.aliyunSecretKey=${aliyunSecretKey}                   
        说明 一个应用如果有不止一个业务,或者想把定时任务进行归类,可以建立多个分组。例如应用名是animals,新建两个分组animals.dogsanimals.cats。此时不用申请两批实例分别接入2个分组,一个应用可以同时接入2个分组,在客户端中将这2个分组配置到groupId=后面,如groupId=animals.dogs,animals.cats即可。
  2. 新建实现调度任务的类。

    在应用中增加类JobProcessor,实现任务调度。下面介绍如何实现最简单的定时打印“Hello SchedulerX2.0”

    说明 如果您想使用其它调度任务,请参见Java任务

    JobProcessor的代码如下:

    package com.aliyun.schedulerx.test.job;
    
    import com.alibaba.schedulerx.worker.domain.JobContext;
    import com.alibaba.schedulerx.worker.processor.JavaProcessor;
    import com.alibaba.schedulerx.worker.processor.ProcessResult;
    
    @Component
    public class MyHelloJob extends JavaProcessor {
    
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            System.out.println("hello schedulerx2.0");
            return new ProcessResult(true);
        }
    }              

执行结果

  1. 登录EDAS控制台
  2. 在左侧导航栏中选择组件中心 > 分布式任务调度2.0,然后在左侧导航栏单击应用管理
  3. 应用管理页面选择之前创建的分组所在地域命名空间,然后在之前创建的分组的操作列单击连接机器

    • 如果接入成功,可以看到机器列表。
    • 如果接入失败,会弹出暂无可用机器的提示信息。

后续步骤

在您的应用接入调度任务并部署到EDAS后,就可以创建调度任务了。详情请参见创建调度任务