文档中心 > 淘宝达人

定时任务

更新时间:2015/09/18 访问次数:70034

定时任务介绍

     php定时任务是指我们定时触发用户写的php代码的执行,来完成需要周期性处理的后台任务

TASK服务使用方法

    开发者需要在JAE控制台配置任务服务,入口如下:

如何设置一个定时任务?

    1. 创建新任务

    通过定时任务入口进入创建页面

创建新任务

新建一个任务需要提供三个信息,任务名称、任务表达式及任务描述,任务名称与任务描述由开发者自由定义;

任务表达式必须满足的Quartz的规则,完整的的表达式说明可以参考:Quartz说明

以每天2点定时执行会员增量同步的案例来看,表达式应该如下设置:

	0 2 * * ?

上述表达式就说明该任务是在每个月每天的2点0分开始执行该任务。

Quartz表达式说明:

第1列表示分,取值0~59 每分钟用*或者 */1表示
第2列表示小时,取值0~23(0表示0点)
第3列表示日期,取值0~31
第4列表示月份,取值0~11或JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV
第5列表示星期几,取值1~7(1=Sunday)或SUN, MON, TUE, WED, THU, FRI,SAT

符号简介:
"*"代表取值范围内的数字
"/"代表"每"
"-"代表从某个数字到某个数字
","分开几个离散的数字
"?"用来表示没有意义的值,日期列和星期列中,必须有一个为?

 

 2. 上传调度任务

应用创建完毕后,将已打好包的调度任务程序包上传到对应的任务上;

需要注意的是,调用任务程序包必须打包为ZIP格式。

调度任务开发指南

  接入JAE的任务模型,ISV需要把任务的业务逻辑拆解为两个阶段:数据准备阶段及数据处理阶段

JAE任务框架负责回调这两阶段的代码

JAE SDK使用方式

引入ACE任务的maven依赖

		<dependency>
    <groupId>com.alibaba.appengine</groupId>
    <artifactId>services-jae-api</artifactId>
    <version>1.0.1-SNAPSHOT</version>
</dependency>

ISV的任务需要继承实现AbstractPrefetchTask

参数row:字段名、字段值的键值对。参数args:第一个元素是用户传入的业务参数,第二个是sharding相关的总实例数total,第三个是sharding相关的实例编号order,第四个是预计开始时间

import com.alibaba.appengine.jae.api.task.AbstractPrefetchTask;
 public class MyPrefetchTask extends AbstractPrefetchTask {
     	/**
    	* 遍历预取的数据集,以单行数据交由该方法做处理
    	*
    	*/
    	@Override
    	public void run(String[] args, Row prefetch) {
       	 ...
    	}

配置SQL文件实现数据预取的逻辑

通 过配置SQL文件实现数据预取的逻辑(可以完整利用Ibatis的dynamic statement写出复杂逻辑的SQL以满足复杂需求),SQL文件的默认文件路径:classpath:prefetchSql.xml。也可以通过 重载 AbstractPrefetchTask的getPrefetchSqlPath方法自定义该配置文件的路径.

配置文件

使 用jdk原生支持的spi机制向ACE任务容器暴露AbstractPrefetchTask的实现类。因此需要在最终的提供的jar包中包含以下配置文 件: META-INF/services/com.alibaba.appengine.jae.api.task.AbstractPrefetchTask
文件内容就是AbstractPrefetchTask实现类的全限定名:
com.xxx.yyy.MyPrefetchTask.

工程打包与上传

ISV需要把工程打包为jar,同时工程相关的依赖jar一起打包为zip,通过JAE后台上传。在eclipse中示例的项目结构如下:

定时任务demo

demo下载

FAQ

关于此文档暂时还没有FAQ
返回
顶部