基於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 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM