修改了scheduler lock 机制
authorTang Cheng <cheng.tang@supwisdom.com>
Fri, 19 Jul 2019 01:11:29 +0000 (09:11 +0800)
committerTang Cheng <cheng.tang@supwisdom.com>
Fri, 19 Jul 2019 01:11:29 +0000 (09:11 +0800)
payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
payapi/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt

index de2afe3..14663ec 100644 (file)
@@ -1,10 +1,9 @@
 package com.supwisdom.dlpay.framework.core;
 
 import com.supwisdom.dlpay.framework.domain.TSettleLog;
-import com.supwisdom.dlpay.framework.domain.TTaskLock;
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
-import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import net.javacrumbs.shedlock.core.SchedulerLock;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,8 +12,6 @@ import org.springframework.stereotype.Component;
 
 @Component
 public class DayendSettleTask {
-  @Autowired
-  private SystemUtilService systemUtilService;
   @Autowired
   private DayendSettleService dayendSettleService;
 
@@ -22,24 +19,12 @@ public class DayendSettleTask {
 
   private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class);
 
-  @Scheduled(cron="${dayend.settletask.cron}")
+  @Scheduled(cron = "${dayend.settletask.cron}")
+  @SchedulerLock(name = "DayendSettleTask")
   public void doSettleTask() {
     if (logger.isDebugEnabled()) logger.debug("进入日结算任务!");
-
-    TTaskLock lock = null;
+    settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
     try {
-      try {
-        lock = systemUtilService.doLockTask("DAYENDSETTLETASK", 30, "日终结算");
-        if (lock == null) {
-          if (logger.isDebugEnabled()) logger.debug("日终结算正在其他服务器上执行");
-          return;
-        }
-      } catch (Exception e) {
-        return;
-      }
-
-      settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
-
       //step1: 账户校验(fixme: 清算任务?)
       long t1 = System.currentTimeMillis();
       if (!checkAccounts()) {
@@ -71,12 +56,6 @@ public class DayendSettleTask {
     } catch (Exception e) {
       logger.error("日终结算报错:" + (!StringUtil.isEmpty(e.getMessage()) ? e.getMessage() : e.getClass().getName()));
       e.printStackTrace();
-    } finally {
-      if (null != lock) {
-        lock.setTaskstatus(0);
-        lock.setTasktime(systemUtilService.getSysdatetime().getHostdatetime());
-        systemUtilService.updateTaskLock(lock);
-      }
     }
   }
 
index e1343d4..2c76329 100644 (file)
@@ -14,10 +14,6 @@ import javax.persistence.SequenceGenerator;
 @Repository
 public interface TaskLockDao extends JpaRepository<TTaskLock, String> {
 
-  @Lock(LockModeType.PESSIMISTIC_WRITE)
-  @Query("select a from TTaskLock a where a.taskcode=:taskcode")
-  TTaskLock getTaskLockWithLock(@Param("taskcode") String taskcode);
-
   //================= database=Oracle =================//
   @Query(value = "select  to_char(sysdate,'yyyymmdd') as hostdate,to_char(sysdate,'hh24miss') as hosttime,to_char(sysdate,'yyyymmddhh24miss') as hostdatetime, sysdate from dual", nativeQuery = true)
   SystemDateTime getOracleDatetime();
index e575265..ca18764 100644 (file)
@@ -15,18 +15,6 @@ public interface SystemUtilService {
   @Transactional
   SystemDateTime getSysdatetime();
 
-  /**
-   * 更新任务表
-   */
-  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-  TTaskLock updateTaskLock(TTaskLock lock);
-
-  /**
-   * 取任务表
-   */
-  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-  TTaskLock doLockTask(String taskcode, Integer minRecover, String remark);
-
   /**
    * 获取记账日期
    */
index 51b2b0b..baf8449 100644 (file)
@@ -56,37 +56,6 @@ public class SystemUtilServiceImpl implements SystemUtilService {
     }
   }
 
-  @Override
-  public TTaskLock updateTaskLock(TTaskLock lock) {
-    return taskLockDao.save(lock);
-  }
-
-  @Override
-  public TTaskLock doLockTask(String taskcode, Integer minRecover, String remark) {
-    if (null == minRecover) minRecover = 10; //默认10分钟
-    String hostdatetime = getSysdatetime().getHostdatetime(); //yyyyMMddHHmmss
-    TTaskLock lock = taskLockDao.getTaskLockWithLock(taskcode);
-    if (lock != null) {
-      if (lock.getTaskstatus() == 1 && DateUtil.compareDatetime(DateUtil.getNewTime(hostdatetime, -60 * minRecover), lock.getTasktime()) < 0) {
-        // 被锁,正在执行操作
-        return null;
-      } else {
-        lock.setTaskstatus(1);
-        lock.setTasktime(hostdatetime);
-        taskLockDao.save(lock);
-        return lock;
-      }
-    } else {
-      lock = new TTaskLock();
-      lock.setTaskcode(taskcode);
-      lock.setTaskstatus(1);
-      lock.setTasktime(hostdatetime);
-      lock.setRemark(remark);
-      taskLockDao.save(lock);
-    }
-    return lock;
-  }
-
   @Override
   public String getAccdate() {
     String hostdate = getSysdatetime().getHostdate();
index 7d93474..7f7ea81 100644 (file)
@@ -8,7 +8,6 @@ import com.supwisdom.dlpay.api.repositories.ShopaccService
 import com.supwisdom.dlpay.api.service.ConsumePayService
 import com.supwisdom.dlpay.api.service.DtlQueryResultService
 import com.supwisdom.dlpay.api.service.TransactionServiceProxy
-import com.supwisdom.dlpay.framework.domain.TTaskLock
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.ApplicationUtil
 import com.supwisdom.dlpay.framework.util.TradeDict