使用简单任务只需要配置此任务的总体分片规则和时间调度规则,然后实现任务的配置类,最后在真正执行任务逻辑的类中继承SimpleJob接口类,并且实现其execute方法,这样就完成了简单任务的全部工作。
(1)时间及分片设置
在yml文件中添加如下信息:
使用此配置,设定任务总体分片数为3,每个小时执行一次定时任务。
(2)添加配置类
此类根据之前设置的配置项和新创建的定时任务对象启动调度执行。
(3)定义定时任务执行逻辑
此类是真正定时任务执行业务逻辑的地方,在execute方法中打印了总分片数和当前分片数,并且使用数据操作类OrderDao获取即将支付超时的用户id。
(4)基于当前分片数的数据处理
在OrderDaoImpl类中添加如下方法,此方法接收两个参数:总分片数和当前分片数,然后根据这两个参数进行数据查询,获取用户id。
(5)自定义mapper
自定义Mapper类映射的接口方法为
public List<Long>getUnpaidUser(Map<Object,Object>map);(www.xing528.com)
此语句的目的是查询userid对总分片数取模等于此任务的分片值的即将到期未支付订单的userid。
(6)运行情况演示
运行一个定时任务实例,当达到时间规则时,可以看到如下输出:
SpringSimpleJob------Thread ID:51,任务总片数:3,当前分片项:2
SpringSimpleJob------Thread ID:50,任务总片数:3,当前分片项:1
SpringSimpleJob------Thread ID:49,任务总片数:3,当前分片项:0
SpringSimpleJob:50 cur=1 list is[7,10,1,4,37]
SpringSimpleJob:49 cur=0 list is[6,3,33,12,9,15,18]
SpringSimpleJob:51 cur=2 list is[2,5,8,23,11,98,17]
由上面的输出可见,返回的userid对3取模等于它的分片数,即各个分片根据研发者定义的逻辑,处理自己分片相应的数据内容。
如果再启动一个任务实例,那么新启动的实例就会分担全部分片中某些分片的任务,这样就实现了横向扩展的目的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。