java quartz没执行完_quartz 防止上一任务未执行完毕,下一时间点重复执行
/*** 訂單監(jiān)控類
* 定時(shí)掃描所有待付款訂單,超時(shí)自動(dòng)取消
* Created by huangbaidong
* 2017/3/29.*/@Componentpublic classOrderMonitorJob {
@ResourceprivateRedisUtil redisUtil;
@ResourceprivateBsdOrderService bsdOrderService;
@ResourceprivateBsdDFKOrderCacheManager bsdDFKOrderCacheManager;private boolean isLock = false;/*** 待付款訂單定時(shí)掃描類
* 定時(shí)掃描所有待付款訂單,超時(shí)自動(dòng)取消*/
public voidpaymentTimeoutScan() {if(!isLock) {//加鎖,防止定時(shí)器重復(fù)執(zhí)行,
isLock = true;try{
List orders =bsdDFKOrderCacheManager.getAll();if(BlankUtil.isNotEmpty(orders)) {
List removeIds = new ArrayList<>();//需要移除的訂單
for(BsdDFKOrderCacheEntity order : orders) {if (Dictionary.ORDER_STATUS_DFK ==order.getOrderStatus()) {boolean isExpire = false;if (order.isHasPromotion() == 1) {//如果是有促銷規(guī)則的訂單,1小時(shí)未支付,自動(dòng)取消訂單
if (System.currentTimeMillis() - order.getOrderTime().getTime() >CommonConstants.hasRulePayTimeout) {
isExpire= true;
}
}else{//如果是沒有促銷規(guī)則的訂單,24小時(shí)未支付,自動(dòng)取消訂單
if (System.currentTimeMillis() - order.getOrderTime().getTime() >CommonConstants.hasNotRulePayTimeout) {
isExpire= true;
}
}if(isExpire) {//1、自動(dòng)取消訂單(操作人ID傳0)
bsdOrderService.cancel(order.getId(), 0l);//2、記錄過期的訂單,將訂單從緩存中清除
removeIds.add(order.getId().toString());
System.out.println("------>訂單[" + order.getCode() + "]超時(shí)未付款自動(dòng)取消訂單");
}
}else{//不是待付款狀態(tài)的訂單,記錄從緩存中清除
removeIds.add(order.getId().toString());
}
}//將不是待支付狀態(tài)的訂單,以及過期的未支付的訂單從緩存中刪除
if(BlankUtil.isNotEmpty(removeIds)) {
bsdDFKOrderCacheManager.removeFromCache(removeIds);
}
}
}finally{//運(yùn)行完后釋放鎖
isLock = false;
}
}
}
}
總結(jié)
以上是生活随笔為你收集整理的java quartz没执行完_quartz 防止上一任务未执行完毕,下一时间点重复执行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓dos模拟器哪个好(安卓dos模拟器
- 下一篇: 电子账册备案模式(电子账册备案)