From d23608dec38c2904fc47f9220587cb5c90dbd394 Mon Sep 17 00:00:00 2001 From: zeaslity Date: Mon, 6 Feb 2023 11:58:38 +0800 Subject: [PATCH] [ server ] [ scheduler ]- script scheduler update -2 --- .../rpc/controller/SchedulerController.java | 18 +++++ .../service/QuartzSchedulerService.java | 20 +++-- .../service/QuartzSchedulerServiceImpl.java | 81 ++++++++++++++++--- 3 files changed, 100 insertions(+), 19 deletions(-) diff --git a/server/src/main/java/io/wdd/rpc/controller/SchedulerController.java b/server/src/main/java/io/wdd/rpc/controller/SchedulerController.java index 57f2dcc..5e54573 100644 --- a/server/src/main/java/io/wdd/rpc/controller/SchedulerController.java +++ b/server/src/main/java/io/wdd/rpc/controller/SchedulerController.java @@ -50,6 +50,24 @@ public class SchedulerController { return R.ok(octopusQuartzService.queryAllScriptScheduleMission()); } + @ApiOperation(value = "[脚本]-删除定时脚本任务") + @PostMapping(value = "/script/delete") + public R deleteScriptScheduler( + @RequestParam(value = "scriptJobUUID") @ApiParam(value = "scriptJobUUID", name = "定时脚本任务UUID") String scriptJobUUID + ) { + + return R.ok(octopusQuartzService.deleteScriptScheduleMission(scriptJobUUID)); + } + + @ApiOperation(value = "[脚本]-修改定时脚本任务") + @PostMapping(value = "/script/modify") + public R modifyScriptScheduler( + @ApiParam(name = "scheduleScript") @RequestBody() ScriptSchedulerVO scriptSchedulerVO + ) { + + return R.ok(octopusQuartzService.modifyScriptScheduleMission(scriptSchedulerVO)); + } + /** * -------------------------------------------------------------- * 普通的定时任务查询功能 diff --git a/server/src/main/java/io/wdd/rpc/scheduler/service/QuartzSchedulerService.java b/server/src/main/java/io/wdd/rpc/scheduler/service/QuartzSchedulerService.java index e45e20c..4442ab6 100644 --- a/server/src/main/java/io/wdd/rpc/scheduler/service/QuartzSchedulerService.java +++ b/server/src/main/java/io/wdd/rpc/scheduler/service/QuartzSchedulerService.java @@ -110,14 +110,6 @@ public interface QuartzSchedulerService { */ List> queryAllMission(); - - /** - * 查询所有定时脚本任务 - * - * @return - */ - List queryAllScriptScheduleMission(); - /** * 获取正在运行的任务job * @@ -141,5 +133,17 @@ public interface QuartzSchedulerService { */ HashMap createScriptScheduledMission(ScriptSchedulerVO scriptSchedulerVO); + /** + * 查询所有定时脚本任务 + * + * @return + */ + List queryAllScriptScheduleMission(); + + + boolean deleteScriptScheduleMission(String schedulerUuid); + + + JobDetail modifyScriptScheduleMission(ScriptSchedulerVO scriptSchedulerVO); } diff --git a/server/src/main/java/io/wdd/rpc/scheduler/service/QuartzSchedulerServiceImpl.java b/server/src/main/java/io/wdd/rpc/scheduler/service/QuartzSchedulerServiceImpl.java index 93bc59e..93f177c 100644 --- a/server/src/main/java/io/wdd/rpc/scheduler/service/QuartzSchedulerServiceImpl.java +++ b/server/src/main/java/io/wdd/rpc/scheduler/service/QuartzSchedulerServiceImpl.java @@ -9,11 +9,11 @@ import io.wdd.rpc.scheduler.config.QuartzSchedulerUtils; import io.wdd.rpc.scheduler.job.AgentScriptSchedulerJob; import io.wdd.server.beans.po.ScriptSchedulerPO; import io.wdd.server.service.ScriptSchedulerService; -import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; import org.quartz.*; import org.quartz.DateBuilder.IntervalUnit; import org.quartz.impl.matchers.GroupMatcher; @@ -23,6 +23,7 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.Resource; +import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.stream.Collectors; @@ -72,7 +73,8 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService { ); this.addMission( AgentScriptSchedulerJob.class, - scriptSchedulerDTO.getName(), + // 方便删除任务,比较好定位 + scriptSchedulerDTO.getSchedulerUuid(), SCRIPT_SCHEDULE_MISSION_GROUP_NAME, scriptSchedulerDTO.getDescription(), 0, @@ -127,7 +129,6 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService { * @param scriptSchedulerVO 定时脚本任务-前端页面-实体类 * @return 定时脚本任务-中间转换状态-实体类 */ - @SneakyThrows private ScriptSchedulerDTO validateAndConvertToScriptSchedulerDTO(ScriptSchedulerVO scriptSchedulerVO) { // 验证cron表达式 @@ -156,10 +157,14 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService { // 生成DTO对象 ScriptSchedulerDTO dto = new ScriptSchedulerDTO(); - BeanUtils.copyProperties( - dto, - scriptSchedulerVO - ); + try { + BeanUtils.copyProperties( + dto, + scriptSchedulerVO + ); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } // 初始化属性值 dto.setAgentTopicNameToFutureResultKeyMap( @@ -170,10 +175,11 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService { dto.setCompleteCommandList(completeCommandList); dto.setTargetMachineList(targetMachineList); - // 生成 scheduler uuid - String uuid = RandomStringUtils.randomAlphabetic(32); - dto.setSchedulerUuid(uuid); + if (StringUtils.isEmpty(scriptSchedulerVO.getSchedulerUuid())) { + String uuid = RandomStringUtils.randomAlphabetic(32); + dto.setSchedulerUuid(uuid); + } return dto; } @@ -363,7 +369,9 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService { ); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); log.info( - "new jobTime: {}", + "prepare to UPDATE Job {} Group {} to new jobTime: {}", + jobName, + jobGroupName, jobTime ); trigger = trigger @@ -554,6 +562,57 @@ public class QuartzSchedulerServiceImpl implements QuartzSchedulerService { } + @Override + public boolean deleteScriptScheduleMission(String schedulerUuid) { + + // 直接构造 + JobKey jobKey = new JobKey( + schedulerUuid, + SCRIPT_SCHEDULE_MISSION_GROUP_NAME + ); + + try { + + return scheduler.deleteJob(jobKey); + + } catch (SchedulerException e) { + throw new RuntimeException(e); + } + + } + + @Override + public JobDetail modifyScriptScheduleMission(ScriptSchedulerVO scriptSchedulerVO) { + + String uuid = scriptSchedulerVO.getSchedulerUuid(); + + // 直接构造 + JobKey jobKey = new JobKey( + uuid, + SCRIPT_SCHEDULE_MISSION_GROUP_NAME + ); + + JobDetail jobDetail = null; + try { + jobDetail = scheduler.getJobDetail(jobKey); + } catch (SchedulerException e) { + // job 不存在或者什么信息 + return null; + } + // 该Job存在 + // 修改JobDetail信息 + ScriptSchedulerDTO scriptSchedulerDTO = validateAndConvertToScriptSchedulerDTO(scriptSchedulerVO); + + // 修改 Mission相应的 cron时间信息 + updateMission( + uuid, + SCRIPT_SCHEDULE_MISSION_GROUP_NAME, + scriptSchedulerDTO.getCronExpress() + ); + + return jobDetail; + } + /** * 获取所有正在运行的job *