🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**1. 任务暂停(挂起)** ```java //方式1:只暂停该触发器绑定的任务实例 scheduler.pauseTrigger(TriggerKey.triggerKey("trigger3", "trigger-group1")); //方式2:暂停所有该ID的任务实例,即所有触发器绑定的该任务的任务实例都会被暂停 scheduler.pauseJob(JobKey.jobKey("job4", "job-group1")); ``` <br/> **2. 任务恢复执行** >[info]任务暂停后的恢复执行 ```java //方式1:只恢复该触发器绑定的任务实例 scheduler.resumeTrigger(TriggerKey.triggerKey("trigger3", "trigger-group1")); //方式2:恢复该ID的所有任务实例,即所有触发器绑定的该任务的任务实例都会恢复执行 scheduler.resumeJob(JobKey.jobKey("job4", "job-group1")); ``` <br/> **3. 任务修改** >[info]任务修改是指修改触发器,从而改变任务的执行规则;但对一个已经存在的 JobDetail 进行修改是不允许的。 ```java //获取旧触发器 TriggerKey triggerKey = TriggerKey.triggerKey("trigger3", "trigger-group1"); Trigger odlTrigger = scheduler.getTrigger(triggerKey); //创建新的触发器 Trigger newTrigger = TriggerBuilder.newTrigger() .withIdentity(triggerKey) .startNow() .withDescription(odlTrigger.getDescription()) .withSchedule( SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(2) .repeatForever() ) .build(); //用新的触发器覆盖旧的触发器,注意新旧触发器的ID不变 scheduler.rescheduleJob(triggerKey, newTrigger); ``` ``` /// 打印的日志 /// 2023-03-31T18:40:20 ...UserJob : 触发器ID: trigger-group1.trigger3 2023-03-31T18:40:20 ...UserJob : 任务ID: job-group1.job4 ... 2023-03-31T18:40:24 ...UserJob : 触发器ID: trigger-group1.trigger3 2023-03-31T18:40:24 ...UserJob : 任务ID: job-group1.job4 ... //之前是每隔 4s 执行一次,修改为每隔 2s 执行一次 2023-03-31T18:40:27 ...UserJob : 触发器ID: trigger-group1.trigger3 2023-03-31T18:40:27 ...UserJob : 任务ID: job-group1.job4 ... 2023-03-31T18:40:29 ...UserJob : 触发器ID: trigger-group1.trigger3 2023-03-31T18:40:29 ...UserJob : 任务ID: job-group1.job4 ``` <br/> **4. 任务删除** ```java //方式1:只删除该触发器绑定的 JobDetail 实例。 // 所以此时你重新创建了一个同 ID 的任务是不可以的,因为这个任务的定义还存在 TriggerKey triggerKey = TriggerKey.triggerKey("trigger3", "trigger-group1"); //暂停触发器 scheduler.pauseTrigger(triggerKey); //移除触发器 scheduler.unscheduleJob(triggerKey); //方式2:删除所有的 JobDetail 实例并也已删除了 JobDetail 的定义, // 所以此时已不存在同 ID 的任务,你可以重新创建该任务了 scheduler.deleteJob(JobKey.jobKey("job4", "job-group1")); ``` <br/> **5. 查询所有的任务实例** >[info]可以获取所有正在运行、或已暂停的任务实例,当然删除的就获取不到了 ```java //获取所有的触发器组 List<String> triggerGroups = scheduler.getTriggerGroupNames(); for (String group : triggerGroups) { GroupMatcher<TriggerKey> groupMatcher = GroupMatcher.groupEquals(group); //获取该组所有的触发器 Set<TriggerKey> triggerKeys = scheduler.getTriggerKeys(groupMatcher); for (TriggerKey triggerKey : triggerKeys) { Trigger trigger = scheduler.getTrigger(triggerKey); //触发器状态,NORMAL正在运行、PAUSED已经暂停 String state = scheduler.getTriggerState(triggerKey).name(); //获取该触发器绑定的任务 JobKey jobKey = trigger.getJobKey(); JobDetail jobDetail = scheduler.getJobDetail(jobKey); log.info("触发器ID: {}, 触发器状态: {}", triggerKey.getGroup() + "." + triggerKey.getName(), state); log.info("任务ID: {}\n", jobKey.getGroup() + "." + jobKey.getName()); } } ``` ``` /// 打印日志 /// 2023-03-31T19:31:18...er.UserJobController : 触发器ID: trigger-group1.trigger5, 触发器状态: NORMAL 2023-03-31T19:31:18...er.UserJobController : 任务ID: job-group1.job4 2023-03-31T19:31:18...er.UserJobController : 触发器ID: trigger-group1.trigger4, 触发器状态: NORMAL 2023-03-31T19:31:18...er.UserJobController : 任务ID: job-group1.job4 2023-03-31T19:31:18...er.UserJobController : 触发器ID: trigger-group1.trigger3, 触发器状态: PAUSED 2023-03-31T19:31:18...er.UserJobController : 任务ID: job-group1.job4 ```