任务Cron更新逻辑优化,改为rescheduleJob,同时防止cron重复设置;
This commit is contained in:
parent
54d92de752
commit
25cf93fdc2
|
@ -847,6 +847,9 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
|
||||||
- 5、执行参数编辑时丢失问题修复;
|
- 5、执行参数编辑时丢失问题修复;
|
||||||
- 6、新增任务测试Demo,方便在开发时进行任务逻辑测试;
|
- 6、新增任务测试Demo,方便在开发时进行任务逻辑测试;
|
||||||
|
|
||||||
|
#### 6.16 版本 V1.8.0 特性[Coding]
|
||||||
|
- 1、任务Cron更新逻辑优化,改为rescheduleJob,同时防止cron重复设置;
|
||||||
|
|
||||||
#### TODO LIST
|
#### TODO LIST
|
||||||
- 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
|
- 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
|
||||||
- 2、任务分片:一个任务被拆分成N个独立的任务单元,然后由分布式部署的执行器分别执行某一个或几个分片单元;
|
- 2、任务分片:一个任务被拆分成N个独立的任务单元,然后由分布式部署的执行器分别执行某一个或几个分片单元;
|
||||||
|
|
|
@ -193,25 +193,40 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
|
||||||
|
|
||||||
// TriggerKey : name + group
|
// TriggerKey : name + group
|
||||||
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
|
TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
|
||||||
JobKey jobKey = new JobKey(jobName, jobGroup);
|
CronTrigger oldTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
||||||
|
|
||||||
// CronTrigger : TriggerKey + cronExpression
|
if (oldTrigger != null) {
|
||||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();
|
// avoid repeat
|
||||||
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
|
String oldCron = oldTrigger.getCronExpression();
|
||||||
|
if (oldCron.equals(cronExpression)){
|
||||||
//scheduler.rescheduleJob(triggerKey, cronTrigger);
|
return true;
|
||||||
|
}
|
||||||
// JobDetail-JobDataMap fresh
|
|
||||||
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
|
// CronTrigger : TriggerKey + cronExpression
|
||||||
/*JobDataMap jobDataMap = jobDetail.getJobDataMap();
|
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();
|
||||||
jobDataMap.clear();
|
oldTrigger = oldTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
|
||||||
jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));*/
|
|
||||||
|
// rescheduleJob
|
||||||
// Trigger fresh
|
scheduler.rescheduleJob(triggerKey, oldTrigger);
|
||||||
HashSet<Trigger> triggerSet = new HashSet<Trigger>();
|
} else {
|
||||||
triggerSet.add(cronTrigger);
|
// CronTrigger : TriggerKey + cronExpression
|
||||||
|
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();
|
||||||
scheduler.scheduleJob(jobDetail, triggerSet, true);
|
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
|
||||||
|
|
||||||
|
// JobDetail-JobDataMap fresh
|
||||||
|
JobKey jobKey = new JobKey(jobName, jobGroup);
|
||||||
|
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
|
||||||
|
/*JobDataMap jobDataMap = jobDetail.getJobDataMap();
|
||||||
|
jobDataMap.clear();
|
||||||
|
jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));*/
|
||||||
|
|
||||||
|
// Trigger fresh
|
||||||
|
HashSet<Trigger> triggerSet = new HashSet<Trigger>();
|
||||||
|
triggerSet.add(cronTrigger);
|
||||||
|
|
||||||
|
scheduler.scheduleJob(jobDetail, triggerSet, true);
|
||||||
|
}
|
||||||
|
|
||||||
logger.info(">>>>>>>>>>> resumeJob success, JobGroup:{}, JobName:{}", jobGroup, jobName);
|
logger.info(">>>>>>>>>>> resumeJob success, JobGroup:{}, JobName:{}", jobGroup, jobName);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue