全部产品
云市场

开始使用定时任务

更新时间:2020-04-02 15:35:35

定时任务组件依赖消息队列(Message Queue)。在使用定时任务之前,您必须先开通消息队列服务。

开始使用定时任务前,请确认您已经完成环境配置,详情见 前置条件

使用定时任务中间件实现定时任务功能的流程为:

  1. 开发编码
  2. 发布应用至云端
  3. 云端配置定时任务

开发编码

Maven 依赖

在接收定时任务的模块的 pom.xml 中添加如下依赖:

  1. <dependency>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>scheduler-enterprise-sofa-boot-starter</artifactId>
  4. </dependency>

任务处理器代码

  1. public class SchedulerDemo implements ISimpleJobHandler {
  2. ThreadPoolExecutor threadPoolExecutor;
  3. @Override
  4. public String getName() {
  5. return "DEMOAPP_DEMOTASK";
  6. }
  7. @Override
  8. public ThreadPoolExecutor getThreadPool() {
  9. return threadPoolExecutor;
  10. }
  11. @Override
  12. public ClientCommonResult handle(JobExecuteContext context) {
  13. boolean success = true;
  14. // 业务逻辑代码
  15. if (success) {
  16. return ClientCommonResult.buildSuccessResult();
  17. } else {
  18. return ClientCommonResult.buildFailResult("handle failed");
  19. }
  20. }
  21. public void setThreadPoolExecutor(ThreadPoolExecutor threadPoolExecutor) {
  22. this.threadPoolExecutor = threadPoolExecutor;
  23. }
  24. }

任务处理器实现 com.alipay.antschedulerclient.handler.ISimpleJobHandler 接口及接口内的所有方法:

  • getName() 返回字符串,必须跟页面配置的任务名称一致;
  • getThreadPool() 执行该任务所用的线程池,可以每个任务处理器注入独立的线程池,也可以多个任务处理器共享一个线程池,如果返回 null 则使用公共的默认线程池;
  • handle(JobExecuteContext context) 编写任务执行逻辑,需返回 ClientCommonResult 表示任务执行结果。

Spring 配置

您可以通过以下两种方式将实现了 ISimpleJobHandler 接口的类 SchedulerDemo 声明为 Spring Bean:

  • 在 Spring XML 中定义 <bean/>。示例如下:
    1. <bean id="schedulerDemo" class="com.antcloud.tutorial.scheduler.SchedulerDemo" />
  • 使用注解驱动(annotation-driven)的方式声明 Bean。

application.properties

每个环境需要连接的服务端不一样,参见 RPC 引用服务 完成对应环境的 application.properties 参数调整:

  • com.alipay.env
  • com.alipay.instanceid
  • com.antcloud.antvip.endpoint

发布应用

将应用发布至云端,SOFABoot 应用的发布参见 SOFABoot 快速入门

云端配置定时任务

完成应用发布后,您需要前往微服务控制台进行定时任务的创建与管理,参见 新增与管理定时任务