deason 2 anni fa
parent
commit
0f86c126cf

+ 24 - 0
src/main/java/cn/com/qmth/examcloud/tool/config/ScheduleHandler.java

@@ -0,0 +1,24 @@
+package cn.com.qmth.examcloud.tool.config;
+
+import cn.com.qmth.examcloud.tool.service.TaskService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ScheduleHandler implements CommandLineRunner {
+
+    private static final Logger log = LoggerFactory.getLogger(ScheduleHandler.class);
+
+    @Autowired
+    private TaskService taskService;
+
+    @Override
+    public void run(String... args) throws Exception {
+        int x = taskService.clearExpiredTaskStatus();
+        log.warn("结束过期任务数:" + x);
+    }
+
+}

+ 7 - 0
src/main/java/cn/com/qmth/examcloud/tool/dao/TaskRepository.java

@@ -3,8 +3,10 @@ package cn.com.qmth.examcloud.tool.dao;
 import cn.com.qmth.examcloud.tool.entity.TaskEntity;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 @Repository
 public interface TaskRepository extends JpaRepository<TaskEntity, Long>, JpaSpecificationExecutor<TaskEntity> {
@@ -12,4 +14,9 @@ public interface TaskRepository extends JpaRepository<TaskEntity, Long>, JpaSpec
     @Query(value = "select id from t_task where status='WAITING' order by id limit 1", nativeQuery = true)
     Long getFirstWaitingTaskId();
 
+    @Transactional
+    @Modifying
+    @Query(value = "update t_task set status='ERROR' where status='RUNNING'", nativeQuery = true)
+    int clearExpiredTaskStatus();
+
 }

+ 4 - 0
src/main/java/cn/com/qmth/examcloud/tool/service/TaskService.java

@@ -86,6 +86,10 @@ public class TaskService {
         return taskRepository.getFirstWaitingTaskId();
     }
 
+    public int clearExpiredTaskStatus() {
+        return taskRepository.clearExpiredTaskStatus();
+    }
+
     @Transactional
     public Long addTask(TaskAdd req) {
         if (req.getType() == null) {