分片定时任务可以把数据的收集和数据的处理分成两个阶段来处理,第一阶段为要处理的数据收集的阶段,每批收集不超过2000条数据,这个数据string的形式表示,返回后我们负责保存到数据库中,一直调用收集方法(take),直到收集方法的中的结束标识设置为true。收集阶段结束后进入数据处理阶段,每次以出2000条给任务的处理方法(run)来处理这些数据,直到所有数据处理处理完成,任务结束。
以maven工程为例,
第一步,依赖我们的SDK
<groupId>com.alibaba.appengine</groupId>
<artifactId>services-jae-api</artifactId>
<version>1.0.4-SNAPSHOT</version>
第?步,自己写的任务处理类extends AbstractShardingTask进行开发自己的任务:其中args[] = {“参数”,null,null,FireTime}, 由于之前args[1]和args[2]是提供给其它任务类型使用的,对于分片任务是null,args[0]对于take方法是告诉用户收集到第几批了从0开始,args[0]对于run方法是本批需要处理的数据的json格式。
例如:
public class MyShardingTask extends AbstractShardingTask {
@Override
public ShardingSet take(String[] args) {
。。。。。。
ShardingSet set = new ShardingSet(finished);//这个finished表?示这一批数据收集完后是否就结束了,如果没有没结束还需要收集下一批数据就设置成false,如果这已经是最后一批则True
set.add("a”);//这?里?面每次放进去的数据不能超过2000个,超过2000个就直接抛异常了
set.add("b");
set.add("c”);
set.
return set;
}
@Override
public String run(String[] args) {
。。。。。。
return "OK";
}
}
第三步,配置该类到项目中的改文件 main/resources/META-INF/services/
com.alibaba.appengine.jae.api.task.AbstractShardingTask
文件内容就写你那个类的全路径,例如:
com.xxx.yyy.MyShardingTask
第四步,打包
打包的时候要把自己类和依赖的jar全部打出来,把所有这些jar打成一个zip
例如maven的这个插件可以把所有依赖的jar也打出来
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
用这个插件打完包后,target目录下面就有你自己的jar和你依赖的那些jar了,把这些jar全部打到一个zip文件中就可以上传了。
配置文件中的Apender要使用我们提供的appender才可以打到用户日志中,例如:
# This is the configuring for logging displayed in the Application Server
log4j.rootLogger = INFO,logAppender
#ace4j log appender
log4j.appender.logAppender=com.alibaba.appengine.api.log.appender.LogAppender
log4j.appender.logAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.logAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS}%-5p[%-c]%m%n
log4j.appender.logAppender.Threshold=INFO
数据收集阶段每次放到ShardingTask中的数据不要太大,可以放一些索引之类的数据方便数据处理
阶段能找到数据就可以了。