定时任务elastic-job

官网:概览 :: ElasticJob

错过任务重执行:

ElasticJob 不允许作业在同一时间内叠加执行。 当作业的执行时长超过其运行间隔,错过任务重执行能够保证作业在完成上次的任务后继续执行逾期的作业

举例:作业分别于 12:00,13:00 和 14:00 执行,如果 12:00 开始执行的作业在 13:10 才执行完毕,那么本该由 13:00 触发的作业则错过了触发时间,需要等待至 14:00 的下次作业触发,在开启错过任务重执行功能之后,ElasticJob 将会在上次作业执行完毕后,立刻触发执行错过的作业

目前提供3种作业类型,分别是SimpleDataFlowScript

Simple:

@Slf4j
@Service
public class SimpleJobTest implements SimpleJob {
    
    @Override
    public void execute(ShardingContext shardingContext) {
        //执行分片任务
        long startTime = System.currentTimeMillis();
        log.info("定时任务job:{}启动",shardingContext.getJobName());

        //查询特定时间段内活动结束的批次账户
        Date startDate = DateUtil.calBeginTimeForDay(-361L);
        Date endDate = DateUtil.calEndTimeForDay(-361L);
        batchCloseBiz.close(startDate,endDate);

        log.info("定时任务job:{}结束,耗时{}ms", shardingContext.getJobName(),System.currentTimeMillis() - startTime);
    }
}

DataFlow:

@Slf4j
@Component
public class SimpleJobTest implements DataflowJob<String>{


    @Override
    public List<String> fetchData(ShardingContext shardingContext) {
        // 当前机器的分片编号
        int shardingItem = shardingContext.getShardingItem();
        // 定时器总的分片数
        int shardingTotalCount = shardingContext.getShardingTotalCount();
        //从数据库获取分片数据 
        List<UserDao> userDaoList= "sql语句获取数据待处理的数据集";
        // 查看是否是需要本台机器处理的分片数据
        userDaoList.stream().filter(userDao->
                ShardingKit.getShrading(limitDetailBO.getId().toString(), shardingTotalCount) == shardingItem )
        return date;
    }

    @Override
    public void processData(ShardingContext shardingContext, List<String> data) {
         //分片数据处理
    }
}

/**
* 对id进去取模
* @param modKey  业务BO的取模字段
* @param shardKey  定时任务分片数
* @return
*/
public static Integer getShrading(String modKey,int shardKey){
     return modKey.hashCode() & (shardKey - 1);
}


Script:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值