本文介绍如何将本地接入云上公网环境来进行本地开发、调试和验证。

前提条件

操作步骤

  1. 在应用pom.xml文件中添加SchedulerxWorker依赖。
    针对不同应用,在初始化SchedulerxWorker时会有所不同。
    • 普通Java或Spring应用
      <dependency>
        <groupId>com.aliyun.schedulerx</groupId>
        <artifactId>schedulerx2-worker</artifactId>
        <version>${schedulerx2.version}</version>
        <!--如果用的是logback,需要把log4j和log4j2排除掉 -->
        <exclusions>
          <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
          </exclusion>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
        </exclusions>
      </dependency>              
    • Spring Boot应用
      <dependency>
        <groupId>com.aliyun.schedulerx</groupId>
        <artifactId>schedulerx2-spring-boot-starter</artifactId>
        <version>${schedulerx2.version}</version>
        <!--如果用的是logback,需要把log4j和log4j2排除掉 -->
        <exclusions>
          <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
          </exclusion>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
        </exclusions>
      </dependency>                   
  2. 初始化SchedulerxWorker。
    针对不同应用,在初始化SchedulerxWorker的时候会有所不同。
    • 普通Java应用

      在main函数中初始化SchedulerxWorker。

      初始化SchedulerxWorker时,会用到您部署应用的公网地域(Region)和对应的Endpoint(acm.aliyun.com)。

      1. 在控制台顶部菜单栏将地域切换为公网
      2. 在左侧导航栏单击命名空间,在命名空间页面查看命名空间ID(Namespace)。公网命名空间
      3. 在左侧导航栏单击应用管理,在应用管理页面查看应用ID(groupId)和应用key(appKey)。公网应用管理
      4. 将光标移动到控制台右上角的用户头像上,在弹出的列表中单击AccessKey管理,在AccessKey管理页面获取AccessKeyID(AliyunAccessKey)和AccessKeySecret(AliyunSecretKey)。
      public void initSchedulerxWorker() throws Exception {
          SchedulerxWorker schedulerxWorker = new SchedulerxWorker();
          schedulerxWorker.setEndpoint("xxxx");
          schedulerxWorker.setNamespace("xxxx");
          schedulerxWorker.setGroupId("xxxx");
          //1.2.1及以上版本需要设置应用key
          schedulerxWorker.setAppKey("xxxx");
          //1.2.1以下版本需要设置AK/SK
          //schedulerxWorker.setAliyunAccessKey("xxxx");
          //schedulerxWorker.setAliyunSecretKey("xxxx");
          schedulerxWorker.init();
      }
      说明
      • 一个应用如果包含多个业务,或者想把定时任务进行归类,可以建立多个分组,例如应用animals新建了两个分组animals.dogsanimals.cats。此时不用申请两批实例分别接入这两个分组,在应用客户端中将这两个分组配置到groupId=后面即可,例如groupId=animals.dogs,animals.cats
      • 在初始化SchedulerxWorker客户端时,如果还有其它配置需求,可以参考SchedulerxWorker 配置参数说明添加配置。
    • Spring应用

      在xml配置文件中注入SchedulerxWorker Bean。

      1. 在控制台顶部菜单栏将地域切换为公网
      2. 在左侧导航栏单击命名空间,在命名空间页面查看命名空间ID(Namespace)。公网命名空间
      3. 在左侧导航栏单击应用管理,在应用管理页面查看应用ID(groupId)和应用key(appKey)。公网应用管理
      4. 将光标移动到控制台右上角的用户头像上,在弹出的列表中单击AccessKey管理,在AccessKey管理页面获取AccessKeyID(AliyunAccessKey)和AccessKeySecret(AliyunSecretKey)。
      <bean id="schedulerxWorker" class="com.alibaba.schedulerx.worker.SchedulerxWorker">
          <property name="endpoint">
            <value>${endpoint}</value>
          </property>
          <property name="namespace">
            <value>${namespace}</value>
          </property>
          <property name="groupId">
            <value>${groupId}</value>
          </property>
          <!--1.2.1及以上版本设置appKey -->
          <property name="appKey">
            <value>${appKey}</value>
          </property>
          
          <!--1.2.1以下版本需要设置AK/SK -->
          <!--
          <property name="aliyunAccessKey">
            <value>${aliyunAccessKey}</value>
          </property>
          <property name="aliyunSecretKey">
            <value>${aliyunSecretKey}</value>
          </property>
          -->
          
      </bean>
    • Spring Boot应用

      application.properties文件中添加如下配置:

      1. 在控制台顶部菜单栏将地域切换为公网
      2. 在左侧导航栏单击命名空间,在命名空间页面查看命名空间ID(Namespace)。公网命名空间
      3. 在左侧导航栏单击应用管理,在应用管理页面查看应用ID(groupId)和应用key(appKey)。公网应用管理
      4. 将光标移动到控制台右上角的用户头像上,在弹出的列表中单击AccessKey管理,在AccessKey管理页面获取AccessKeyID(AliyunAccessKey)和AccessKeySecret(AliyunSecretKey)。
      spring.schedulerx2.endpoint=${endpoint}
      spring.schedulerx2.namespace=${namespace}
      spring.schedulerx2.groupId=${groupId}
      # 1.2.1及以上版本设置appKey
      spring.schedulerx2.appKey=${appKey}
      
      # 1.2.1以下版本设置AK/SK
      #spring.schedulerx2.aliyunAccessKey=${aliyunAccessKey}
      #spring.schedulerx2.aliyunSecretKey=${aliyunSecretKey}                  
      说明 一个应用如果包含多个业务,或者想把定时任务进行归类,可以建立多个分组,例如应用animals新建了两个分组animals.dogsanimals.cats。此时不用申请两批实例分别接入这两个分组,在应用客户端中将这两个分组配置到groupId=后面即可,例如groupId=animals.dogs,animals.cats
  3. 在应用中创建类JobProcessor,实现任务调度。

    本文仅介绍如何实现一个最简单的定时打印“Hello SchedulerX2.0”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);
        }
    }              
  4. 运行本地应用。

结果验证

  1. 客户端接入完成,将该应用发布到阿里云。
  2. 登录分布式任务调度平台
  3. 在顶部菜单栏选择地域。
  4. 在左侧导航栏单击应用管理
  5. 应用管理页面查看实例总数
    • 如果实例总数为0,则说明应用接入失败。请检查、修改本地应用。
    • 如果实例总数不为0,显示接入的实例个数,则说明应用接入成功。在操作列单击查看实例,即可在连接实例对话框中查看实例列表。
    应用管理-实例总数