zoukankan      html  css  js  c++  java
  • 基于Redis在定时任务里判断其他定时任务是否已经正常执行完的方案

    执行的定时任务是基于其他定时任务计算得到的结果基础上做操作的,那么如何来确定其他存在数据依赖的定时任务已经执行完成呢?
    在分布式环境里,可通过集群的redis来解决这个问题:
    即,在跑批任务开始时,将任务key+当日凌晨时间组成的key值进行加1,例如:
    1 redisOperator.getJedis().incr(key+ startDateStr);
    2 redisOperator.setKeyExpireTime(key+ startDateStr, 60*60*24);
    跑批完成后,再将任务key+当日凌晨时间组成的key值减1,例如:
    1 //跑批结束后自减
    2 redisOperator.getJedis().decr(key+ startDateStr);
    正常任务执行完,redis里对应的应该状态是0。
     1 //阻塞循环,一直等到另外的定时任务跑成功了,才继续。
     2 while (!checkCanRun(reportTime)) {
     3     int interval = 7200000;
     4     long sleepTime = System.currentTimeMillis();
     5     //休眠
     6     logger.info("sendOperationDailyReportHandler sleep time = " + TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()-sleepTime) + " seconds");
     7     Thread.sleep(interval);
     8 }
     9 
    10 
    11 private boolean checkCanRun (DateTime reportTime) {
    12 
    13     String runningFinishKey = redisOperator.getValueByKey(key + dateStr);
    14 
    15     if ("0".equals(runningFinishKey )) {
    16         return true;
    17     }
    18     return false;
    19 }
     
  • 相关阅读:
    Mybatis问题记录-狂神版
    Uni-App开发记录
    某笔试题目--修复回文
    人生就是一个苏醒的过程
    今天早上进入你的空间突然发现咱们以前的东西都不见了,点开你的情侣空间.....
    青春物语
    中小学、幼儿园教师资格认定
    换屏
    oracle 语句
    Packet for query is too large (1057 > 1024)解决
  • 原文地址:https://www.cnblogs.com/zhujiqian/p/13199158.html
Copyright © 2011-2022 走看看