Redis鎖失效,兩臺服務的Job都運行了,致使統計數據重複生成

問題

每日0點統計商家前一天訂單數量,銷售額。發現統計表出現兩份數據,一份在0點生成,一份在00:05生成。html

分析

2018-07-18 17:06:00.002 ERROR 1064 --- [pool-2-thread-1] isticJob$$EnhancerBySpringCGLIB$$f68d4cc : 開始StatisticJob》》》》》》》》》》》》》》
2018-7-18 17:06:00setScheduler
2018-7-18 17:06:00success=true
2018-07-18 17:06:00.105  INFO 1064 --- [pool-2-thread-1] c.u.core.interceptor.MybatisInterceptor  : com.ukingclub.food.dao.statistic.IStatisticFoodDao.statisticDay
 執行SQL:CALL pro_statistic_day_food('2018-07-03');
 執行時間:30ms
2018-07-18 17:06:00.109  INFO 1064 --- [pool-2-thread-1] c.u.core.aspect.ServiceLogAspect         : 執行service方法:class com.ukingclub.food.service.statistic.StatisticFoodService.statisticDay()  本次共耗時:[52毫秒]
2018-07-18 17:06:00.109  INFO 1064 --- [pool-2-thread-1] isticJob$$EnhancerBySpringCGLIB$$f68d4cc : 訂單數據分析任務結束,統計耗時:0秒
2018-07-18 17:11:00.109 ERROR 1064 --- [pool-2-thread-1] isticJob$$EnhancerBySpringCGLIB$$f68d4cc : 結束StatisticJob》》》》》》》》》》》》》》
2018-07-18 17:11:00.116 ERROR 1064 --- [pool-2-thread-1] ticJob2$$EnhancerBySpringCGLIB$$bf08f5b4 : 開始StatisticJob2》》》》》》》》》》》》》》
2018-7-18 17:11:00setScheduler
2018-7-18 17:11:00success=true
2018-07-18 17:11:00.136  INFO 1064 --- [pool-2-thread-1] c.u.core.interceptor.MybatisInterceptor  : com.ukingclub.food.dao.statistic.IStatisticFoodDao.statisticDay
 執行SQL:CALL pro_statistic_day_food('2018-07-03');
 執行時間:17ms
2018-07-18 17:11:00.137  INFO 1064 --- [pool-2-thread-1] c.u.core.aspect.ServiceLogAspect         : 執行service方法:class com.ukingclub.food.service.statistic.StatisticFoodService.statisticDay()  本次共耗時:[18毫秒]
2018-07-18 17:11:00.138  INFO 1064 --- [pool-2-thread-1] ticJob2$$EnhancerBySpringCGLIB$$bf08f5b4 : 訂單數據分析任務結束,統計耗時=====:0秒
2018-07-18 17:16:00.139 ERROR 1064 --- [pool-2-thread-1] ticJob2$$EnhancerBySpringCGLIB$$bf08f5b4 : 結束StatisticJob2》》》》》》》》》》》》》》
  • 懷疑Job沒有通知執行,網上查了一下,果真是少配置了註解,Job只能同步執行。
  • 可是兩臺服務器爲啥也會出現同一個Job執行了兩次?有鎖控制了啊,原來是0點有多個任務同時執行,全部總會有一個商家統計Job會晚5分鐘執行。由於Job通常執行後會睡5分鐘。

處理方案

Job類增長註解:@EnableAsync
方法增長註解:@Async服務器

參考:SpringBoot + @Scheduled 多任務併發併發

總結

  • 查看線程執行時機,判斷問題出如今哪裏
相關文章
相關標籤/搜索