全部产品
云市场

实现任务调度

更新时间:2019-03-19 16:45:53

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

为什么使用 SchedulerX

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

在本地实现任务调度

  1. 创建一个 Maven 工程,命名为scx-example

  2. Spring Boot 2.0.6.RELEASESpring Cloud Finchley.SR1 为例,在pom.xml文件中添加如下依赖。

    1. <parent>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-parent</artifactId>
    4. <version>2.0.6.RELEASE</version>
    5. <relativePath/>
    6. </parent>
    7. <dependencies>
    8. <dependency>
    9. <groupId>org.springframework.cloud</groupId>
    10. <artifactId>spring-cloud-starter-alicloud-schedulerx</artifactId>
    11. <version>0.2.1.RELEASE</version>
    12. </dependency>
    13. <dependency>
    14. <groupId>org.springframework.boot</groupId>
    15. <artifactId>spring-boot-starter-web</artifactId>
    16. </dependency>
    17. </dependencies>
    18. <dependencyManagement>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.cloud</groupId>
    22. <artifactId>spring-cloud-dependencies</artifactId>
    23. <version>Finchley.SR1</version>
    24. <type>pom</type>
    25. <scope>import</scope>
    26. </dependency>
    27. </dependencies>
    28. </dependencyManagement>

    说明

    • 如果您需要选择使用 Spring Boot 1.x 的版本,请使用 Spring Boot 1.5.xSpring Cloud Edgware 版本,对应的 Spring Cloud Alibaba 版本为 0.1.1.RELEASE
    • Spring Boot 1.x 版本的生命周期即将在 2019 年 8 月 结束,推荐使用 Spring Boot 新版本开发您的应用。
  3. 创建scx-example的启动类ScxApplication

    1. import org.springframework.boot.SpringApplication;
    2. import org.springframework.boot.autoconfigure.SpringBootApplication;
    3. @SpringBootApplication
    4. public class ScxApplication {
    5. public static void main(String[] args) {
    6. SpringApplication.run(ScxApplication.class, args);
    7. }
    8. }
    9. ```
  4. 创建一个简单的类TestService,通过 Spring 向测试任务中的 IOC 进行注入。

    1. import org.springframework.stereotype.Service;
    2. @Service
    3. public class TestService {
    4. public void test() {
    5. System.out.println("---------IOC Success--------");
    6. }
    7. }
  5. 创建一个简单的SimpleTask作为测试任务类,并在其中注入TestService

    1. import com.alibaba.edas.schedulerx.ProcessResult;
    2. import com.alibaba.edas.schedulerx.ScxSimpleJobContext;
    3. import com.alibaba.edas.schedulerx.ScxSimpleJobProcessor;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. public class SimpleTask implements ScxSimpleJobProcessor {
    6. @Autowired
    7. private TestService testService;
    8. @Override
    9. public ProcessResult process(ScxSimpleJobContext context) {
    10. System.out.println("-----------Hello world---------------");
    11. testService.test();
    12. ProcessResult processResult = new ProcessResult(true);
    13. return processResult;
    14. }
    15. }
  6. 创建调度任务并添加配置。

    1. 登录 EDAS 控制台,在测试地域中创建调度任务分组并记录分组 ID。

    2. 在创建的任务分组中按如下参数创建调度任务

      • Job 分组:选择在测试地域下刚创建的任务分组的分组 ID
      • Job 处理接口:Job 处理接口实现类的全类名,本文档中为 SimpleTask,和应用中的测试任务类保持一致。
      • 类型简单 Job 单机版
      • 定时表达式默认选项*0 * * * * ?*。表示任务每分钟会被执行一次。
      • Job 描述:无
      • 自定义参数:无
    3. 在本地 Maven 工程的src/main/resources路径下创建文件application.properties,在中添加如下配置。

      1. server.port=18033
      2. # 配置任务的地域(测试地域对应的 **regionName** 为 *cn-test*)和分组ID(group-id)
      3. spring.cloud.alicloud.scx.group-id=***
      4. spring.cloud.alicloud.edas.namespace=cn-test
  7. 执行ScxApplication中的 main 函数,启动服务。

结果验证

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

  1. -----------Hello world---------------
  2. ---------IOC Success--------

部署到 EDAS

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

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

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

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

  1. 登录 EDAS 控制台,在杭州地域创建任务分组调度任务

  2. 登录安全信息管理页面,获取 Access Key ID 和 Access Key Secret。

  3. application.properties文件中配置调度任务。

    除了简单 Job 单机版,您还可以配置其它类型的调度任务。详情请参考分布式任务调度 SchedulerX 简介

  4. application.properties文件中添加您阿里云账号的 Access Key ID 和 Access Key Secret 的配置。

    1. spring.cloud.alicloud.access-key=xxxxx
    2. spring.cloud.alicloud.secret-key=xxxxx

后续操作

您的应用部署到 EDAS 之后,就可以使用 SchedulerX 组件实现更多任务调度的能力。详情请参考分布式任务调度 SchedulerX 简介