diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicSchedulerAutoConfiguration.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicSchedulerAutoConfiguration.java index e840afa..7e53339 100644 --- a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicSchedulerAutoConfiguration.java +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicSchedulerAutoConfiguration.java @@ -1,5 +1,6 @@ package com.xiang.xservice.schedule.config; +import com.xiang.xservice.schedule.core.TaskRegistry; import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.AutoConfiguration; diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/core/DynamicTaskScheduler.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/core/DynamicTaskScheduler.java new file mode 100644 index 0000000..d6951a8 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/core/DynamicTaskScheduler.java @@ -0,0 +1,49 @@ +package com.xiang.xservice.schedule.core; + +import com.xiang.xservice.schedule.entity.TaskConfig; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledFuture; + +@Component +@RequiredArgsConstructor +public class DynamicTaskScheduler { + private final ThreadPoolTaskScheduler taskScheduler; + private final Map> taskMap = new ConcurrentHashMap<>(); + + + public void schedule(TaskConfig config, Runnable task) { + LocalDateTime time = config.getExecutionTime(); + if (time.isBefore(LocalDateTime.now())) return; + + ScheduledFuture future = taskScheduler.schedule(() -> { + try { + task.run(); + } finally { + taskMap.remove(config.getTaskId()); + } + }, Date.from(time.atZone(ZoneId.systemDefault()).toInstant())); + + taskMap.put(config.getTaskId(), future); + } + + public void cancel(Long taskId) { + ScheduledFuture future = taskMap.get(taskId); + if (future != null) { + future.cancel(true); + + taskMap.remove(taskId); + } + } + + public Boolean contains(Long taskId) { + return taskMap.containsKey(taskId); + } +} diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/TaskRegistry.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/core/TaskRegistry.java similarity index 92% rename from xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/TaskRegistry.java rename to xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/core/TaskRegistry.java index 9f9c9cf..d679683 100644 --- a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/TaskRegistry.java +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/core/TaskRegistry.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.schedule.config; +package com.xiang.xservice.schedule.core; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/TaskGroupEnum.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/enums/TaskGroupEnum.java similarity index 87% rename from xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/TaskGroupEnum.java rename to xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/enums/TaskGroupEnum.java index 417f798..b4cdca6 100644 --- a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/TaskGroupEnum.java +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/enums/TaskGroupEnum.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.schedule; +package com.xiang.xservice.schedule.enums; import lombok.Getter; diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/helper/TaskExecutor.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/helper/TaskExecutor.java new file mode 100644 index 0000000..0c27f21 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/helper/TaskExecutor.java @@ -0,0 +1,8 @@ +package com.xiang.xservice.schedule.helper; + + +import com.xiang.xservice.schedule.entity.TaskConfig; + +public interface TaskExecutor { + void execute(TaskConfig taskInfo); +} diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/DynamicTaskSchedulerServiceImpl.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/DynamicTaskSchedulerServiceImpl.java index 44244b4..6f607a8 100644 --- a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/DynamicTaskSchedulerServiceImpl.java +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/DynamicTaskSchedulerServiceImpl.java @@ -1,59 +1,16 @@ package com.xiang.xservice.schedule.service; import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; -import com.xiang.xservice.schedule.entity.TaskConfig; import com.xiang.xservice.schedule.mapper.ScheduledTaskMapper; import lombok.RequiredArgsConstructor; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ScheduledFuture; - @Service @RequiredArgsConstructor public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerService{ - private final ThreadPoolTaskScheduler taskScheduler; private final ScheduledTaskMapper scheduledTaskMapper; - private final Map> taskMap = new ConcurrentHashMap<>(); - - @Override - public void schedule(TaskConfig config, Runnable task) { - LocalDateTime time = config.getExecutionTime(); - if (time.isBefore(LocalDateTime.now())) return; - - ScheduledFuture future = taskScheduler.schedule(() -> { - try { - task.run(); - } finally { - taskMap.remove(config.getTaskId()); - } - }, Date.from(time.atZone(ZoneId.systemDefault()).toInstant())); - - taskMap.put(config.getTaskId(), future); - } - - @Override - public void cancel(String taskId) { - ScheduledFuture future = taskMap.get(taskId); - if (future != null) { - future.cancel(true); - - taskMap.remove(taskId); - } - } - - @Override - public Boolean contains(String taskId) { - return taskMap.containsKey(taskId); - } - @Override public Boolean saveTask(ScheduledTaskEntity entity) { return scheduledTaskMapper.save(entity) > 0; diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/IDynamicTaskSchedulerService.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/IDynamicTaskSchedulerService.java index 6aa776e..1168dfd 100644 --- a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/IDynamicTaskSchedulerService.java +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/IDynamicTaskSchedulerService.java @@ -1,14 +1,9 @@ package com.xiang.xservice.schedule.service; import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; -import com.xiang.xservice.schedule.entity.TaskConfig; -import java.time.LocalDateTime; public interface IDynamicTaskSchedulerService { - void schedule(TaskConfig config, Runnable task); - void cancel(String taskId); - Boolean contains(String taskId); Boolean saveTask(ScheduledTaskEntity entity); Boolean updateTask(ScheduledTaskEntity entity); ScheduledTaskEntity getTask(String taskId);