Job核心调度逻辑优化

This commit is contained in:
aoshiguchen
2022-09-14 19:17:56 +08:00
parent f9d9e9e9fc
commit 6e3311ede3
@@ -56,6 +56,7 @@ public class JobExecutor implements ApplicationRunner, IJobExecutor {
private Map<String, IJobHandler> jobHandlerMap = new ConcurrentHashMap<>();
private Set<String> runJobSet = Sets.newHashSet();
private IJobCallback jobCallback;
private Map<String, TriggerKey> triggerKeyMap = new ConcurrentHashMap<>();
@Override
public void run(String[] args) throws JobException {
@@ -114,9 +115,10 @@ public class JobExecutor implements ApplicationRunner, IJobExecutor {
if (null == jobInfo || StringUtil.isEmpty(jobInfo.getName()) || StringUtil.isEmpty(jobInfo.getCron()) || jobInfoMap.containsKey(jobInfo.getName())) {
return;
}
jobInfoMap.put(jobInfo.getName(), jobInfo);
jobInfoMap.put(jobInfo.getId(), jobInfo);
TriggerKey triggerKey = TriggerKey.triggerKey(jobInfo.getName());
TriggerKey triggerKey = TriggerKey.triggerKey(jobInfo.getId());
triggerKeyMap.put(jobInfo.getId(), triggerKey);
JobKey jobKey = new JobKey(jobInfo.getName());
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(jobInfo.getCron()).withMisfireHandlingInstructionDoNothing();
@@ -145,15 +147,32 @@ public class JobExecutor implements ApplicationRunner, IJobExecutor {
if (null == context || null == context.getTrigger()) {
return;
}
if (!jobInfoMap.containsKey(context.getTrigger().getKey().getName())
|| !jobHandlerMap.containsKey(context.getTrigger().getKey().getName())) {
String jobId = context.getTrigger().getKey().getName();
JobInfo jobInfo = jobInfoMap.get(jobId);
if (null == jobInfo) {
TriggerKey triggerKey = triggerKeyMap.get(jobId);
if (null != triggerKey) {
try {
scheduler.unscheduleJob(triggerKey);
} catch (Exception e) {
e.printStackTrace();
}
}
return;
}
doExecute(jobId, jobInfo.getParam());
}
private void doExecute(String jobId, String param) {
JobInfo jobInfo = jobInfoMap.get(jobId);
if (null == jobInfo) {
return;
}
IJobHandler jobHandler =jobHandlerMap.get(jobInfo.getName());
if (null == jobHandler) {
return;
}
threadPoolExecutor.submit(() -> {
JobInfo jobInfo = jobInfoMap.get(context.getTrigger().getKey().getName());
IJobHandler jobHandler =jobHandlerMap.get(jobInfo.getName());
try {
jobHandler.execute(jobInfo.getParam());
if (null != jobCallback) {