EDAS将分布式任务调度SchedulerX作为组件集成到控制台中,实现任务调度。本文将介绍如何在您的Spring Cloud应用中使用SchedulerX实现任务调度,并部署到EDAS中,实现一个简单Job单机版的任务调度功能。

为什么使用SchedulerX

SchedulerX是阿里巴巴的一款分布式任务调度产品。它为您提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务,同时提供分布式的任务执行模型,如网格任务。

在本地实现任务调度

  1. 创建命名为scx-example的Maven工程。
  2. 以Spring Boot 2.1.4.RELEASE和Spring Cloud Finchley.SR1为例,在pom.xml文件中添加如下依赖。
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.1.4.RELEASE</version>
         <relativePath/>
     </parent>
    
      <dependencies>
         <dependency>
             <groupId>com.alibaba.cloud</groupId>
             <artifactId>spring-cloud-starter-alicloud-schedulerx</artifactId>
             <version>2.1.1.RELEASE</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
     </dependencies>
    
     <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-dependencies</artifactId>
                 <version>Finchley.SR1</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
         </dependencies>
     </dependencyManagement>                        
    说明
    • 如果您需要选择使用Spring Boot 1.x的版本,请使用Spring Boot 1.5.x和Spring Cloud Edgware版本,对应的Spring Cloud Alibaba版本为1.5.1.RELEASE。
    • Spring Boot 1.x版本的生命周期已结束,推荐使用Spring Boot新版本开发您的应用。
  3. 创建scx-example的启动类ScxApplication
     import org.springframework.boot.SpringApplication;
     import org.springframework.boot.autoconfigure.SpringBootApplication;
    
     @SpringBootApplication
     public class ScxApplication {
         public static void main(String[] args) {
             SpringApplication.run(ScxApplication.class, args);
         }
     }               
  4. 创建一个简单的类TestService,通过Spring向测试任务中的IOC进行注入。
     import org.springframework.stereotype.Service;
    
     @Service
     public class TestService {
    
         public void test() {
             System.out.println("---------IOC Success--------");
         }
     }                        
  5. 创建一个简单的SimpleTask作为测试任务类,并在其中注入TestService
     import com.alibaba.edas.schedulerx.ProcessResult;
     import com.alibaba.edas.schedulerx.ScxSimpleJobContext;
     import com.alibaba.edas.schedulerx.ScxSimpleJobProcessor;
     import org.springframework.beans.factory.annotation.Autowired;
    
     public class SimpleTask implements ScxSimpleJobProcessor {
    
         @Autowired
         private TestService testService;
    
         @Override
         public ProcessResult process(ScxSimpleJobContext context) {
             System.out.println("-----------Hello world---------------");
             testService.test();
             ProcessResult processResult = new ProcessResult(true);
             return processResult;
         }
    
     }                        
  6. 创建调度任务并添加配置。
    1. 登录EDAS控制台,在测试地域中创建任务分组并记录分组ID。
    2. 在创建的任务分组中按以下参数创建任务。
      • Job分组:选择在测试地域下刚创建的任务分组的分组ID
      • Job处理接口:Job处理接口实现类的全类名,本文档中为SimpleTask,和应用中的测试任务类保持一致。
      • 类型简单Job单机版
      • 定时表达式默认选项*0 * * * * ?*表示任务每分钟会被执行一次。
      • Job描述:无
      • 自定义参数:无
    3. 在本地Maven工程的src/main/resources路径下创建文件application.properties,在中添加如下配置。
      server.port=18033
      # 配置任务的地域(测试地域对应的**regionName**为*cn-test*)和分组ID(group-id)
      spring.cloud.alicloud.scx.group-id=***
      spring.cloud.alicloud.edas.namespace=cn-test                                
  7. 执行ScxApplication中的main函数,启动服务。

结果验证

在IDEA的Console中观察标准输出,可以看到会定时的打印出如下的测试信息。

-----------Hello world---------------
---------IOC Success--------            

部署到EDAS

Spring Cloud AliCloud SchedulerX在设计之初就考虑到了从开发环境迁移到EDAS的场景,您可以直接将应用部署到EDAS中,无需修改任何代码和配置。部署方式和详细步骤请参考应用部署概述(K8s集群)应用部署概述(ECS集群)

在部署完成之后,即可使用EDAS控制台进行任务调度。

在非测试地域使用调度任务的附加步骤

本文档以在测试地域中使用为例,测试环境为公网环境,您在本地或云端都可以进行验证,且没有权限的限制。如果您要部署到其它地域(如杭州)中,还需要在创建调度任务并调度的步骤中完成以下操作:

  1. 登录EDAS控制台,在测试地域中创建任务分组并记录分组ID。
  2. 登录安全信息管理页面,获取AccessKey ID和AccessKey Secret。
  3. application.properties文件中配置调度任务。
    除了简单Job单机版,您还可以配置其它类型的调度任务。
  4. application.properties文件中添加您阿里云账号的AccessKey ID和AccessKey Secret的配置。
    spring.cloud.alicloud.access-key=xxxxx
    spring.cloud.alicloud.secret-key=xxxxx                        

后续操作

您的应用部署到EDAS之后,就可以使用SchedulerX组件实现更多任务调度的能力。