From c59007745ad5704150d1d8850727fbe771bfc96a Mon Sep 17 00:00:00 2001 From: xiang Date: Sat, 26 Jul 2025 23:52:13 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E5=8A=A8=E6=80=81=E8=B0=83?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 1 + xservice-schedule-starter/pom.xml | 20 ++++++++ .../config/DynamicTaskSchedulerConfig.java | 17 +++++++ .../DynamicTaskSchedulerServiceImpl.java | 48 +++++++++++++++++++ .../service/IDynamicTaskSchedulerService.java | 9 ++++ 5 files changed, 95 insertions(+) create mode 100644 xservice-schedule-starter/pom.xml create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicTaskSchedulerConfig.java create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/DynamicTaskSchedulerServiceImpl.java create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/IDynamicTaskSchedulerService.java diff --git a/pom.xml b/pom.xml index eed4df0..1a31fc0 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,7 @@ xservice-common xservice-cache xservice-third-part + xservice-schedule-starter diff --git a/xservice-schedule-starter/pom.xml b/xservice-schedule-starter/pom.xml new file mode 100644 index 0000000..8cac886 --- /dev/null +++ b/xservice-schedule-starter/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + com.xiang + xservice-basic + 1.0-SNAPSHOT + + + xservice-schedule-starter + + + 17 + 17 + UTF-8 + + + \ No newline at end of file diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicTaskSchedulerConfig.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicTaskSchedulerConfig.java new file mode 100644 index 0000000..856b031 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicTaskSchedulerConfig.java @@ -0,0 +1,17 @@ +package com.xiang.xservice.schedule.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +@Configuration +public class DynamicTaskSchedulerConfig { + @Bean + public ThreadPoolTaskScheduler globalTaskScheduler() { + ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setPoolSize(10); + scheduler.setThreadNamePrefix("task-scheduler-"); + scheduler.initialize(); + return scheduler; + } +} 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 new file mode 100644 index 0000000..0c3ec4b --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/DynamicTaskSchedulerServiceImpl.java @@ -0,0 +1,48 @@ +package com.xiang.xservice.schedule.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.stereotype.Service; + +import java.time.Duration; +import java.time.LocalDateTime; +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 Map> taskMap = new ConcurrentHashMap<>(); + + @Override + public void schedule(String taskId, LocalDateTime runTime, Runnable task) { + long delay = Duration.between(LocalDateTime.now(), runTime).toMillis(); + if (delay < 0) { + throw new IllegalArgumentException("时间已过,无法调度"); + } + + ScheduledFuture future = taskScheduler.schedule( + task, new Date(System.currentTimeMillis() + delay) + ); + taskMap.put(taskId, 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); + } +} 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 new file mode 100644 index 0000000..499247b --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/service/IDynamicTaskSchedulerService.java @@ -0,0 +1,9 @@ +package com.xiang.xservice.schedule.service; + +import java.time.LocalDateTime; + +public interface IDynamicTaskSchedulerService { + void schedule(String taskId, LocalDateTime runTime, Runnable task); + void cancel(String taskId); + Boolean contains(String taskId); +} From d96ee51b2946bb32b35e6c1091ab2f8bc9d075ad Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 14:11:15 +0800 Subject: [PATCH 2/5] =?UTF-8?q?perf:=E5=8A=A8=E6=80=81=E8=B0=83=E5=BA=A6sc?= =?UTF-8?q?hedule=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xservice-schedule-starter/pom.xml | 1 + .../DynamicSchedulerAutoConfiguration.java | 10 +++++++ .../config/DynamicTaskSchedulerConfig.java | 4 ++- .../schedule/config/TaskRegistry.java | 21 +++++++++++++++ .../xservice/schedule/entity/TaskConfig.java | 16 ++++++++++++ .../DynamicTaskSchedulerServiceImpl.java | 26 +++++++++++-------- .../service/IDynamicTaskSchedulerService.java | 4 ++- 7 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicSchedulerAutoConfiguration.java create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/TaskRegistry.java create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/TaskConfig.java diff --git a/xservice-schedule-starter/pom.xml b/xservice-schedule-starter/pom.xml index 8cac886..fe12def 100644 --- a/xservice-schedule-starter/pom.xml +++ b/xservice-schedule-starter/pom.xml @@ -8,6 +8,7 @@ xservice-basic 1.0-SNAPSHOT + 1.1-SNAPSHOT xservice-schedule-starter 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 new file mode 100644 index 0000000..55b7701 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicSchedulerAutoConfiguration.java @@ -0,0 +1,10 @@ +package com.xiang.xservice.schedule.config; + +import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Import; + +@AutoConfiguration +@Import({DynamicTaskSchedulerConfig.class, IDynamicTaskSchedulerService.class, TaskRegistry.class}) +public class DynamicSchedulerAutoConfiguration { +} diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicTaskSchedulerConfig.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicTaskSchedulerConfig.java index 856b031..1b79893 100644 --- a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicTaskSchedulerConfig.java +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/DynamicTaskSchedulerConfig.java @@ -10,7 +10,9 @@ public class DynamicTaskSchedulerConfig { public ThreadPoolTaskScheduler globalTaskScheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(10); - scheduler.setThreadNamePrefix("task-scheduler-"); + scheduler.setThreadNamePrefix("dynamic-task-"); + scheduler.setWaitForTasksToCompleteOnShutdown(true); + scheduler.setAwaitTerminationSeconds(30); scheduler.initialize(); return scheduler; } 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/config/TaskRegistry.java new file mode 100644 index 0000000..9f9c9cf --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/config/TaskRegistry.java @@ -0,0 +1,21 @@ +package com.xiang.xservice.schedule.config; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Consumer; + +public class TaskRegistry { + private final ConcurrentHashMap> handlers = new ConcurrentHashMap<>(); + + public void register(Long taskId, Consumer consumer) { + handlers.put(taskId, consumer); + } + + public void run(Long taskId) { + Consumer consumer = handlers.get(taskId); + if (consumer != null) consumer.accept(taskId); + } + + public void unregister(Long taskId) { + handlers.remove(taskId); + } +} diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/TaskConfig.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/TaskConfig.java new file mode 100644 index 0000000..65ba390 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/TaskConfig.java @@ -0,0 +1,16 @@ +package com.xiang.xservice.schedule.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TaskConfig { + private Long taskId; + private String taskName; + private LocalDateTime executionTime; +} 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 0c3ec4b..fbd67bc 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,11 +1,12 @@ package com.xiang.xservice.schedule.service; +import com.xiang.xservice.schedule.entity.TaskConfig; import lombok.RequiredArgsConstructor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Service; -import java.time.Duration; import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Date; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -17,19 +18,22 @@ public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerSer private final ThreadPoolTaskScheduler taskScheduler; - private final Map> taskMap = new ConcurrentHashMap<>(); + private final Map> taskMap = new ConcurrentHashMap<>(); @Override - public void schedule(String taskId, LocalDateTime runTime, Runnable task) { - long delay = Duration.between(LocalDateTime.now(), runTime).toMillis(); - if (delay < 0) { - throw new IllegalArgumentException("时间已过,无法调度"); - } + public void schedule(TaskConfig config, Runnable task) { + LocalDateTime time = config.getExecutionTime(); + if (time.isBefore(LocalDateTime.now())) return; - ScheduledFuture future = taskScheduler.schedule( - task, new Date(System.currentTimeMillis() + delay) - ); - taskMap.put(taskId, future); + 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 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 499247b..5372e9f 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,9 +1,11 @@ package com.xiang.xservice.schedule.service; +import com.xiang.xservice.schedule.entity.TaskConfig; + import java.time.LocalDateTime; public interface IDynamicTaskSchedulerService { - void schedule(String taskId, LocalDateTime runTime, Runnable task); + void schedule(TaskConfig config, Runnable task); void cancel(String taskId); Boolean contains(String taskId); } From 0388d84463d7f30d99c131d5eeee5016a93207d3 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 16:01:45 +0800 Subject: [PATCH 3/5] =?UTF-8?q?perf:=E5=8A=A8=E6=80=81=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xservice/schedule/TaskGroupEnum.java | 17 +++++++ .../DynamicSchedulerAutoConfiguration.java | 3 ++ .../schedule/entity/ScheduledTaskEntity.java | 21 +++++++++ .../schedule/mapper/ScheduledTaskMapper.java | 17 +++++++ .../DynamicTaskSchedulerServiceImpl.java | 19 ++++++++ .../service/IDynamicTaskSchedulerService.java | 4 ++ .../main/resources/META-INF/spring.factories | 2 + .../resources/mapper/ScheduledTaskMapper.xml | 45 +++++++++++++++++++ 8 files changed, 128 insertions(+) create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/TaskGroupEnum.java create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/ScheduledTaskEntity.java create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/mapper/ScheduledTaskMapper.java create mode 100644 xservice-schedule-starter/src/main/resources/META-INF/spring.factories create mode 100644 xservice-schedule-starter/src/main/resources/mapper/ScheduledTaskMapper.xml 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/TaskGroupEnum.java new file mode 100644 index 0000000..417f798 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/TaskGroupEnum.java @@ -0,0 +1,17 @@ +package com.xiang.xservice.schedule; + +import lombok.Getter; + +@Getter +public enum TaskGroupEnum { + SERVICE_FWD_SCHEDULE("xs-fwd", "芬玩岛定时任务"); + + + private final String code; + private final String desc; + + TaskGroupEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } +} 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 55b7701..e840afa 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,10 +1,13 @@ package com.xiang.xservice.schedule.config; import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Import; @AutoConfiguration +@MapperScan("com.xiang.xservice.schedule.mapper") @Import({DynamicTaskSchedulerConfig.class, IDynamicTaskSchedulerService.class, TaskRegistry.class}) public class DynamicSchedulerAutoConfiguration { + } diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/ScheduledTaskEntity.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/ScheduledTaskEntity.java new file mode 100644 index 0000000..552a6f0 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/ScheduledTaskEntity.java @@ -0,0 +1,21 @@ +package com.xiang.xservice.schedule.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ScheduledTaskEntity { + private Long id; + private String taskName; + private String taskGroup; + private LocalDateTime runTime; + private Integer status; + private String parameters; + private LocalDateTime createdTime; + private LocalDateTime updatedTime; +} diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/mapper/ScheduledTaskMapper.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/mapper/ScheduledTaskMapper.java new file mode 100644 index 0000000..08806f6 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/mapper/ScheduledTaskMapper.java @@ -0,0 +1,17 @@ +package com.xiang.xservice.schedule.mapper; + +import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface ScheduledTaskMapper { + + int save(ScheduledTaskEntity entity); + + int update(ScheduledTaskEntity entity); + + ScheduledTaskEntity getTask(@Param("id") String taskId); +} 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 fbd67bc..44244b4 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,6 +1,8 @@ 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; @@ -17,6 +19,7 @@ import java.util.concurrent.ScheduledFuture; public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerService{ private final ThreadPoolTaskScheduler taskScheduler; + private final ScheduledTaskMapper scheduledTaskMapper; private final Map> taskMap = new ConcurrentHashMap<>(); @@ -41,6 +44,7 @@ public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerSer ScheduledFuture future = taskMap.get(taskId); if (future != null) { future.cancel(true); + taskMap.remove(taskId); } } @@ -49,4 +53,19 @@ public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerSer public Boolean contains(String taskId) { return taskMap.containsKey(taskId); } + + @Override + public Boolean saveTask(ScheduledTaskEntity entity) { + return scheduledTaskMapper.save(entity) > 0; + } + + @Override + public Boolean updateTask(ScheduledTaskEntity entity) { + return scheduledTaskMapper.update(entity) > 0; + } + + @Override + public ScheduledTaskEntity getTask(String taskId) { + return scheduledTaskMapper.getTask(taskId); + } } 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 5372e9f..6aa776e 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,5 +1,6 @@ package com.xiang.xservice.schedule.service; +import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; import com.xiang.xservice.schedule.entity.TaskConfig; import java.time.LocalDateTime; @@ -8,4 +9,7 @@ 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); } diff --git a/xservice-schedule-starter/src/main/resources/META-INF/spring.factories b/xservice-schedule-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..0eff330 --- /dev/null +++ b/xservice-schedule-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.xiang.xservice.schedule.config.DynamicSchedulerAutoConfiguration \ No newline at end of file diff --git a/xservice-schedule-starter/src/main/resources/mapper/ScheduledTaskMapper.xml b/xservice-schedule-starter/src/main/resources/mapper/ScheduledTaskMapper.xml new file mode 100644 index 0000000..bdb8df8 --- /dev/null +++ b/xservice-schedule-starter/src/main/resources/mapper/ScheduledTaskMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + id, task_name, task_group, run_time, status, parameters, create_time, update_time + + + + + INSERT INTO script_schedule_task (task_name, task_group, run_time, status, parameters, create_time, update_time) + VALUES (#{taskName}, #{taskGroup}, #{runTime}, #{status}, #{parameters}, #{createdTime}, #{updatedTime}) + + + + + UPDATE script_schedule_task + SET task_name = #{taskName}, + task_group = #{taskGroup}, + run_time = #{runTime}, + status = #{status}, + parameters = #{parameters}, + create_time = #{createdTime}, + update_time = #{updatedTime} + WHERE id = #{id} + + + + + \ No newline at end of file From 6e0154bfe95c0fe8f23c5006607b335148a67047 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 16:50:36 +0800 Subject: [PATCH 4/5] =?UTF-8?q?perf:=E5=8A=A8=E6=80=81=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DynamicSchedulerAutoConfiguration.java | 1 + .../schedule/core/DynamicTaskScheduler.java | 49 +++++++++++++++++++ .../{config => core}/TaskRegistry.java | 2 +- .../schedule/{ => enums}/TaskGroupEnum.java | 2 +- .../schedule/helper/TaskExecutor.java | 8 +++ .../DynamicTaskSchedulerServiceImpl.java | 43 ---------------- .../service/IDynamicTaskSchedulerService.java | 5 -- 7 files changed, 60 insertions(+), 50 deletions(-) create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/core/DynamicTaskScheduler.java rename xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/{config => core}/TaskRegistry.java (92%) rename xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/{ => enums}/TaskGroupEnum.java (87%) create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/helper/TaskExecutor.java 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); From 4787e035354826429eef506457f1d6b430c988c1 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 23:46:31 +0800 Subject: [PATCH 5/5] =?UTF-8?q?perf:=E5=8A=A8=E6=80=81=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xservice-common/pom.xml | 1 + .../xservice/basic/utils/PrimaryKeyUtils.java | 65 +++++++++++++++++++ xservice-schedule-starter/pom.xml | 8 +++ .../DynamicSchedulerAutoConfiguration.java | 4 +- .../schedule/core/DynamicTaskScheduler.java | 3 +- .../xservice/schedule/entity/TaskConfig.java | 3 + .../schedule/enums/TaskStatusEnum.java | 20 ++++++ .../schedule/mapper/ScheduledTaskMapper.java | 2 +- .../DynamicTaskSchedulerServiceImpl.java | 39 ++++++++++- .../service/IDynamicTaskSchedulerService.java | 5 +- .../resources/mapper/ScheduledTaskMapper.xml | 10 +-- 11 files changed, 148 insertions(+), 12 deletions(-) create mode 100644 xservice-common/src/main/java/com/xiang/xservice/basic/utils/PrimaryKeyUtils.java create mode 100644 xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/enums/TaskStatusEnum.java diff --git a/xservice-common/pom.xml b/xservice-common/pom.xml index 10f07ac..d57d05f 100644 --- a/xservice-common/pom.xml +++ b/xservice-common/pom.xml @@ -8,6 +8,7 @@ xservice-basic 1.0-SNAPSHOT + 1.0.2-SNAPSHOT xservice-common diff --git a/xservice-common/src/main/java/com/xiang/xservice/basic/utils/PrimaryKeyUtils.java b/xservice-common/src/main/java/com/xiang/xservice/basic/utils/PrimaryKeyUtils.java new file mode 100644 index 0000000..d98e4f7 --- /dev/null +++ b/xservice-common/src/main/java/com/xiang/xservice/basic/utils/PrimaryKeyUtils.java @@ -0,0 +1,65 @@ +package com.xiang.xservice.basic.utils; + + +public class PrimaryKeyUtils { + /** + * 自定义起始时间戳,例如 2025-01-01 + */ + private static final long START_TIMESTAMP = 1735660800000L; + private static final long DATA_CENTER_ID_BITS = 5L; + private static final long WORKER_ID_BITS = 5L; + private static final long SEQUENCE_BITS = 12L; + + private static final long MAX_DATA_CENTER_ID = ~(-1L << DATA_CENTER_ID_BITS); + private static final long MAX_WORKER_ID = ~(-1L << WORKER_ID_BITS); + + private static final long WORKER_ID_SHIFT = SEQUENCE_BITS; + private static final long DATA_CENTER_ID_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS; + private static final long TIMESTAMP_LEFT_SHIFT = SEQUENCE_BITS + WORKER_ID_BITS + DATA_CENTER_ID_BITS; + + private static final long SEQUENCE_MASK = ~(-1L << SEQUENCE_BITS); + + // 可通过配置设置 + private static final long DATA_CENTER_ID = 1L; + private static final long WORKER_ID = 1L; + + private static long sequence = 0L; + private static long lastTimestamp = -1L; + + // 分布式下可使用分布式锁替代 synchronized + public static synchronized long snowflakeId() { + long timestamp = currentTimestamp(); + + if (timestamp < lastTimestamp) { + throw new RuntimeException("Clock moved backwards. Refusing to generate id"); + } + + if (timestamp == lastTimestamp) { + sequence = (sequence + 1) & SEQUENCE_MASK; + if (sequence == 0) { + timestamp = waitNextMillis(timestamp); + } + } else { + sequence = 0L; + } + + lastTimestamp = timestamp; + + return ((timestamp - START_TIMESTAMP) << TIMESTAMP_LEFT_SHIFT) + | (DATA_CENTER_ID << DATA_CENTER_ID_SHIFT) + | (WORKER_ID << WORKER_ID_SHIFT) + | sequence; + } + + private static long waitNextMillis(long currentTimestamp) { + long timestamp = currentTimestamp(); + while (timestamp <= currentTimestamp) { + timestamp = currentTimestamp(); + } + return timestamp; + } + + private static long currentTimestamp() { + return System.currentTimeMillis(); + } +} diff --git a/xservice-schedule-starter/pom.xml b/xservice-schedule-starter/pom.xml index fe12def..21ec7b3 100644 --- a/xservice-schedule-starter/pom.xml +++ b/xservice-schedule-starter/pom.xml @@ -18,4 +18,12 @@ UTF-8 + + + com.xiang + xservice-common + 1.0-SNAPSHOT + + + \ No newline at end of file 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 7e53339..769249a 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,14 +1,14 @@ package com.xiang.xservice.schedule.config; +import com.xiang.xservice.schedule.core.DynamicTaskScheduler; 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; import org.springframework.context.annotation.Import; @AutoConfiguration @MapperScan("com.xiang.xservice.schedule.mapper") -@Import({DynamicTaskSchedulerConfig.class, IDynamicTaskSchedulerService.class, TaskRegistry.class}) +@Import({DynamicTaskSchedulerConfig.class, DynamicTaskScheduler.class, TaskRegistry.class}) public class DynamicSchedulerAutoConfiguration { } 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 index d6951a8..a5f7913 100644 --- 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 @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; @@ -30,7 +31,6 @@ public class DynamicTaskScheduler { taskMap.remove(config.getTaskId()); } }, Date.from(time.atZone(ZoneId.systemDefault()).toInstant())); - taskMap.put(config.getTaskId(), future); } @@ -38,7 +38,6 @@ public class DynamicTaskScheduler { ScheduledFuture future = taskMap.get(taskId); if (future != null) { future.cancel(true); - taskMap.remove(taskId); } } diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/TaskConfig.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/TaskConfig.java index 65ba390..4097387 100644 --- a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/TaskConfig.java +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/entity/TaskConfig.java @@ -5,6 +5,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; +import java.util.Map; @Data @AllArgsConstructor @@ -12,5 +13,7 @@ import java.time.LocalDateTime; public class TaskConfig { private Long taskId; private String taskName; + private String taskGroup; private LocalDateTime executionTime; + private Map parameters; } diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/enums/TaskStatusEnum.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/enums/TaskStatusEnum.java new file mode 100644 index 0000000..cd266b3 --- /dev/null +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/enums/TaskStatusEnum.java @@ -0,0 +1,20 @@ +package com.xiang.xservice.schedule.enums; + +import lombok.Getter; + +@Getter +public enum TaskStatusEnum { + UN_START(1, "未开始"), + PROCEED(2, "进行中"), + FINISHED(3, "已完成"), + CANCELED(4, "取消") + ; + + private final Integer code; + private final String desc; + + TaskStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } +} diff --git a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/mapper/ScheduledTaskMapper.java b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/mapper/ScheduledTaskMapper.java index 08806f6..302046c 100644 --- a/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/mapper/ScheduledTaskMapper.java +++ b/xservice-schedule-starter/src/main/java/com/xiang/xservice/schedule/mapper/ScheduledTaskMapper.java @@ -13,5 +13,5 @@ public interface ScheduledTaskMapper { int update(ScheduledTaskEntity entity); - ScheduledTaskEntity getTask(@Param("id") String taskId); + ScheduledTaskEntity getTask(@Param("id") Long taskId); } 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 6f607a8..69e7178 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,10 +1,14 @@ package com.xiang.xservice.schedule.service; import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; +import com.xiang.xservice.schedule.enums.TaskStatusEnum; import com.xiang.xservice.schedule.mapper.ScheduledTaskMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; +import java.util.Objects; + @Service @RequiredArgsConstructor public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerService{ @@ -22,7 +26,40 @@ public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerSer } @Override - public ScheduledTaskEntity getTask(String taskId) { + public ScheduledTaskEntity getTask(Long taskId) { return scheduledTaskMapper.getTask(taskId); } + + @Override + public Boolean updateProcess(Long taskId) { + ScheduledTaskEntity task = scheduledTaskMapper.getTask(taskId); + if (Objects.nonNull(task)) { + task.setStatus(TaskStatusEnum.PROCEED.getCode()); + task.setUpdatedTime(LocalDateTime.now()); + return scheduledTaskMapper.update(task) > 0; + } + return Boolean.FALSE; + } + + @Override + public Boolean cancelTask(Long taskId) { + ScheduledTaskEntity task = scheduledTaskMapper.getTask(taskId); + if (Objects.nonNull(task)) { + task.setStatus(TaskStatusEnum.CANCELED.getCode()); + task.setUpdatedTime(LocalDateTime.now()); + return scheduledTaskMapper.update(task) > 0; + } + return Boolean.FALSE; + } + + @Override + public Boolean finishTask(Long taskId) { + ScheduledTaskEntity task = scheduledTaskMapper.getTask(taskId); + if (Objects.nonNull(task)) { + task.setStatus(TaskStatusEnum.FINISHED.getCode()); + task.setUpdatedTime(LocalDateTime.now()); + return scheduledTaskMapper.update(task) > 0; + } + return Boolean.FALSE; + } } 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 1168dfd..c2a91da 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 @@ -6,5 +6,8 @@ import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; public interface IDynamicTaskSchedulerService { Boolean saveTask(ScheduledTaskEntity entity); Boolean updateTask(ScheduledTaskEntity entity); - ScheduledTaskEntity getTask(String taskId); + ScheduledTaskEntity getTask(Long taskId); + Boolean updateProcess(Long taskId); + Boolean cancelTask(Long taskId); + Boolean finishTask(Long taskId); } diff --git a/xservice-schedule-starter/src/main/resources/mapper/ScheduledTaskMapper.xml b/xservice-schedule-starter/src/main/resources/mapper/ScheduledTaskMapper.xml index bdb8df8..f3db068 100644 --- a/xservice-schedule-starter/src/main/resources/mapper/ScheduledTaskMapper.xml +++ b/xservice-schedule-starter/src/main/resources/mapper/ScheduledTaskMapper.xml @@ -19,13 +19,13 @@ - - INSERT INTO script_schedule_task (task_name, task_group, run_time, status, parameters, create_time, update_time) - VALUES (#{taskName}, #{taskGroup}, #{runTime}, #{status}, #{parameters}, #{createdTime}, #{updatedTime}) + + INSERT INTO script_schedule_task (id, task_name, task_group, run_time, status, parameters, create_time, update_time) + VALUES (#{id}, #{taskName}, #{taskGroup}, #{runTime}, #{status}, #{parameters}, #{createdTime}, #{updatedTime}) - + UPDATE script_schedule_task SET task_name = #{taskName}, task_group = #{taskGroup}, @@ -37,7 +37,7 @@ WHERE id = #{id} - select from script_schedule_task where id = #{id}