web123456

Springboot Integration Quartz

@Configuration public class JobHandler { @Resource private Scheduler scheduler; /** * Add a task */ @SuppressWarnings("unchecked") public void addJob(JobInfo jobInfo) throws SchedulerException, ClassNotFoundException { Objects.requireNonNull(jobInfo, "Task information cannot be empty"); // Generate job key JobKey jobKey = JobKey.jobKey(jobInfo.getJobName(), jobInfo.getJobGroup()); // Add it only if the current task does not exist if (!scheduler.checkExists(jobKey)) { Class<Job> jobClass = (Class<Job>)Class.forName(jobInfo.getClassName()); // Mission details JobDetail jobDetail = JobBuilder .newJob(jobClass) .withIdentity(jobKey) .withIdentity(jobInfo.getJobName(), jobInfo.getJobGroup()) .withDescription(jobInfo.getJobName()) .build(); // Configuration information jobDetail.getJobDataMap().put("config", jobInfo.getConfig()); // Define triggers TriggerKey triggerKey = TriggerKey.triggerKey(jobInfo.getTriggerName(), jobInfo.getTriggerGroup()); // Set the task missing mechanism Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(triggerKey) .withSchedule(CronScheduleBuilder.cronSchedule(jobInfo.getCron()).withMisfireHandlingInstructionDoNothing()) .build(); scheduler.scheduleJob(jobDetail, trigger); } else { throw new SchedulerException(jobInfo.getJobName() + "The task already exists, no need to add it repeatedly"); } } /** * Mission paused */ public void pauseJob(String jobGroup, String jobName) throws SchedulerException { JobKey jobKey = JobKey.jobKey(jobName, jobGroup); if (scheduler.checkExists(jobKey)) { scheduler.pauseJob(jobKey); } } /** * Continue the mission */ public void continueJob(String jobGroup, String jobName) throws SchedulerException { JobKey jobKey = JobKey.jobKey(jobName, jobGroup); if (scheduler.checkExists(jobKey)) { scheduler.resumeJob(jobKey); } } /** * Delete the task */ public boolean deleteJob(String jobGroup, String jobName) throws SchedulerException { JobKey jobKey = JobKey.jobKey(jobName, jobGroup); if (scheduler.checkExists(jobKey)) { // You also need to delete trigger related //TriggerKey triggerKey = ((), ()); //() //() return scheduler.deleteJob(jobKey); } return false; } /** * Get task information */ public JobInfo getJobInfo(String jobGroup, String jobName) throws SchedulerException { JobKey jobKey = JobKey.jobKey(jobName, jobGroup); if (!scheduler.checkExists(jobKey)) { return null; } List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey); if (Objects.isNull(triggers)) { throw new SchedulerException("Trigger information not obtained"); } TriggerKey triggerKey = triggers.get(0).getKey(); Trigger.TriggerState triggerState = scheduler.getTriggerState(triggerKey); JobDetail jobDetail = scheduler.getJobDetail(jobKey); JobInfo jobInfo = new JobInfo(); jobInfo.setJobName(jobGroup); jobInfo.setJobGroup(jobName); jobInfo.setTriggerName(triggerKey.getName()); jobInfo.setTriggerGroup(triggerKey.getGroup()); jobInfo.setClassName(jobDetail.getJobClass().getName()); jobInfo.setStatus(triggerState.toString()); if (Objects.nonNull(jobDetail.getJobDataMap())) { jobInfo.setConfig(JSONObject.toJSONString(jobDetail.getJobDataMap())); } CronTrigger theTrigger = (CronTrigger) triggers.get(0); jobInfo.setCron(theTrigger.getCronExpression()); return jobInfo; } /** * Get all task information */ public List<JSONObject> getAllJobInfo() { GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup(); Set<JobKey> jobKeys = null; List<JSONObject> jobList = new ArrayList(); Scheduler scheduler = schedulerFactoryBean.getScheduler(); try { jobKeys = scheduler.getJobKeys(matcher); for (JobKey jobKey : jobKeys) { List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey); for (Trigger trigger : triggers) { JSONObject job = new JSONObject(); job.put("jobDetailName", jobKey.getName()); job.put("setGroupName", jobKey.getGroup()); job.put("setJobCronExpression", trigger.getKey()); Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey()); job.put("setStatus", triggerState.name()); job.put("NextFireTime", trigger.getNextFireTime());//Next trigger time if (trigger instanceof CronTrigger) { CronTrigger cronTrigger = (CronTrigger) trigger; String cronExpression = cronTrigger.getCronExpression(); job.put("setJobCronExpression", cronExpression); } jobList.add(job); } } } catch (SchedulerException e) { e.printStackTrace(); } return jobList; } }