Bläddra i källkod

3.4.5 update-20250520 定时任务DisallowConcurrentExecution注解导致超时未更新next_fire_time

xiaofei 1 månad sedan
förälder
incheckning
d73f62fa08

+ 2 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/enums/LockType.java

@@ -24,7 +24,9 @@ public enum LockType {
     CUSTOM_CARD_SAVE("custom_card_save"),
     CUSTOM_MODEL_FOUR_CARD_SAVE("custom_model_four_card_save"),
 	AI_TASK_RESET("ai_task_reset"),
+	OCR_MARK_TASK("ocr_mark_task"),
 	OCR_MARK("ocr_mark"),
+	AI_MARK_TASK("ai_mark_task"),
 	AI_MARK("ai_mark"),
 	RELATE_STUDENTS("relate_students");
 

+ 19 - 5
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/CreatePdfTaskJob.java

@@ -1,13 +1,18 @@
 package com.qmth.teachcloud.task.job;
 
+import com.qmth.boot.core.concurrent.service.ConcurrentService;
+import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.task.job.service.JobService;
 import org.quartz.DisallowConcurrentExecution;
 import org.quartz.JobExecutionContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.quartz.QuartzJobBean;
 
 import javax.annotation.Resource;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @Description: pdf自动生成任务
@@ -16,20 +21,29 @@ import javax.annotation.Resource;
  * @Author: wangliang
  * @Date: 2025/2/27
  */
-@DisallowConcurrentExecution//串行执行
+//@DisallowConcurrentExecution//串行执行
 public class CreatePdfTaskJob extends QuartzJobBean {
     private final static Logger log = LoggerFactory.getLogger(CreatePdfTaskJob.class);
 
     @Resource
     JobService jobService;
 
+    @Autowired
+    private ConcurrentService concurrentService;
+
     @Override
     protected void executeInternal(JobExecutionContext jobExecutionContext) {
-        try {
-            jobService.createPdfTask();
+        if (concurrentService.getReadWriteLock(LockType.CREATE_PDF.name()).writeLock().tryLock()) {
+            try {
+                jobService.createPdfTask();
 //            jobExecutionContext.setResult("最后执行时间:" + DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN));
-        } catch (InterruptedException e) {
-            e.printStackTrace();
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            } finally {
+                concurrentService.getReadWriteLock(LockType.CREATE_PDF.name()).writeLock().unlock();
+            }
+        } else {
+            log.info("create-pdf-task is running");
         }
     }
 }

+ 19 - 2
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/MarkAiJob.java

@@ -1,10 +1,13 @@
 package com.qmth.teachcloud.task.job;
 
+import com.qmth.boot.core.concurrent.service.ConcurrentService;
+import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.task.job.service.JobService;
 import org.quartz.DisallowConcurrentExecution;
 import org.quartz.JobExecutionContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.quartz.QuartzJobBean;
 
 import javax.annotation.Resource;
@@ -12,15 +15,29 @@ import javax.annotation.Resource;
 /**
  * AI评卷OCR识别定时任务
  */
-@DisallowConcurrentExecution//串行执行
+//@DisallowConcurrentExecution//串行执行
 public class MarkAiJob extends QuartzJobBean {
     private final static Logger log = LoggerFactory.getLogger(MarkAiJob.class);
 
     @Resource
     JobService jobService;
 
+    @Autowired
+    private ConcurrentService concurrentService;
+
     @Override
     protected void executeInternal(JobExecutionContext jobExecutionContext) {
-        jobService.autoAiMark();
+        if (concurrentService.getReadWriteLock(LockType.AI_MARK_TASK.name()).writeLock().tryLock()) {
+            try {
+                jobService.autoAiMark();
+            } catch (Exception e) {
+                log.info("mark-ai-task error");
+                e.printStackTrace();
+            } finally {
+                concurrentService.getReadWriteLock(LockType.AI_MARK_TASK.name()).writeLock().unlock();
+            }
+        } else {
+            log.info("mark-ai-task is running");
+        }
     }
 }

+ 19 - 2
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/MarkAiQuestionOcrJob.java

@@ -1,10 +1,13 @@
 package com.qmth.teachcloud.task.job;
 
+import com.qmth.boot.core.concurrent.service.ConcurrentService;
+import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.task.job.service.JobService;
 import org.quartz.DisallowConcurrentExecution;
 import org.quartz.JobExecutionContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.quartz.QuartzJobBean;
 
 import javax.annotation.Resource;
@@ -12,15 +15,29 @@ import javax.annotation.Resource;
 /**
  * AI评卷OCR识别定时任务
  */
-@DisallowConcurrentExecution//串行执行
+//@DisallowConcurrentExecution//串行执行
 public class MarkAiQuestionOcrJob extends QuartzJobBean {
     private final static Logger log = LoggerFactory.getLogger(MarkAiQuestionOcrJob.class);
 
     @Resource
     JobService jobService;
 
+    @Autowired
+    private ConcurrentService concurrentService;
+
     @Override
     protected void executeInternal(JobExecutionContext jobExecutionContext) {
-        jobService.ocrMarkQuestion();
+        if (concurrentService.getReadWriteLock(LockType.OCR_MARK_TASK.name()).writeLock().tryLock()) {
+            try {
+                jobService.ocrMarkQuestion();
+            } catch (Exception e) {
+                log.info("mark-ai-question-ocr-task error");
+                e.printStackTrace();
+            } finally {
+                concurrentService.getReadWriteLock(LockType.OCR_MARK_TASK.name()).writeLock().unlock();
+            }
+        } else {
+            log.info("mark-ai-question-ocr-task is running");
+        }
     }
 }