@Override public MutableTrigger buildTrigger(String config) { JSONObject configObj = JSON.parseObject(config); switch (configObj.getString("type")) { case "cron": String cron = configObj.getString("config"); return CronScheduleBuilder.cronSchedule(cron) .build(); default: throw new UnsupportedOperationException(config); } } }
private String getJobInfo(JobKey jobKey, String jobType) throws SchedulerException { Trigger trigger = scheduler.getTriggersOfJob(jobKey).get(0); if (jobType.equals(JobBasicInfo.JOBTYPE_REPEATING)) { Integer timesTriggered = 0; String repeatMaxCount = "-"; if (trigger instanceof CalendarIntervalTrigger) { CalendarIntervalTrigger calendarIntervalTrigger = (CalendarIntervalTrigger) trigger; timesTriggered = calendarIntervalTrigger.getTimesTriggered(); } else if (trigger instanceof SimpleTrigger) { SimpleTrigger simpleTrigger = (SimpleTrigger) trigger; timesTriggered = simpleTrigger.getTimesTriggered(); } if (trigger.getEndTime() != null) { repeatMaxCount = Integer.toString(TriggerUtils.computeFireTimesBetween( (OperableTrigger) trigger, null, trigger.getStartTime(), trigger.getEndTime() ).size() + timesTriggered); } return String.format("%d/%s", timesTriggered, repeatMaxCount); } else if (jobType.equals(JobBasicInfo.JOBTYPE_CRON)) { CronScheduleBuilder cronScheduleBuilder = (CronScheduleBuilder) trigger.getScheduleBuilder(); CronTrigger cronTrigger = (CronTrigger) cronScheduleBuilder.build(); return cronTrigger.getCronExpression(); } else { return "-"; } }
void startJob(QuartzJob job) { assertNotNull(job, "任务不存在"); JobKey key = createJobKey(job.getId()); JobDetail jobDetail = JobBuilder.newJob(SimpleJob.class) .withIdentity(key) .setJobData(createJobDataMap(job.getParameters())) .usingJobData(SimpleJobFactory.QUARTZ_ID_KEY, job.getId()) .withDescription(job.getName() + (job.getRemark() == null ? "" : job.getRemark())) .build(); MutableTrigger trigger = CronScheduleBuilder.cronSchedule(job.getCron()).build(); trigger.setKey(createTriggerKey(job.getId())); try { scheduler.scheduleJob(jobDetail, trigger); } catch (SchedulerException e) { throw new BusinessException("创建定时任务失败!", e, 500); } }
@Override @Transactional(rollbackFor = { SchedulerException.class, ParseException.class }) public void startSniffing(final long snifferId) throws SchedulerException { logger.debug("Starting cron job for sniffer: {}", snifferId); final Sniffer sniffer = snifferPersistence.getSniffer(snifferId); if (sniffer == null) { throw new SchedulerException("Sniffer not found: " + snifferId); } stopAndDeleteAllSnifferJobs(sniffer.getId()); MutableTrigger trigger; try { trigger = CronScheduleBuilder.cronScheduleNonvalidatedExpression(sniffer.getScheduleCronExpression()) .withMisfireHandlingInstructionDoNothing().build(); } catch (final ParseException e) { throw new SchedulerException("Failed to parse cron expression", e); } trigger.setKey(getKey(sniffer, sniffer.getLogSourceId())); final JobDetail jobDetail = JobBuilder.newJob(SnifferJob.class).requestRecovery() .withIdentity(getJobKey(sniffer, sniffer.getLogSourceId())).build(); scheduler.scheduleJob(jobDetail, trigger); final ScheduleInfo scheduleInfo = scheduleInfoAccess.getScheduleInfo(snifferId); scheduleInfo.setScheduled(true); scheduleInfoAccess.updateScheduleInfo(snifferId, scheduleInfo); logger.info("Scheduled cron job for sniffer {} and log source {} with trigger {}", sniffer, sniffer.getLogSourceId(), trigger); }
@Override public void scheduleDayOfWeekJob(DayOfWeekSchedulableJob dayOfWeekSchedulableJob) { logObjectIfNotNull(dayOfWeekSchedulableJob); MotechEvent motechEvent = dayOfWeekSchedulableJob.getMotechEvent(); LocalDate start = dayOfWeekSchedulableJob.getStartDate(); LocalDate end = dayOfWeekSchedulableJob.getEndDate(); Time time = dayOfWeekSchedulableJob.getTime(); CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.atHourAndMinuteOnGivenDaysOfWeek(time.getHour(), time.getMinute(), dayOfWeekSchedulableJob.getCronDays().toArray(new Integer[0])); CronTriggerImpl cronTrigger = (CronTriggerImpl) cronScheduleBuilder.build(); CronSchedulableJob cronSchedulableJob = new CronSchedulableJob(motechEvent, cronTrigger.getCronExpression(), start.toDate(), end.toDate(), dayOfWeekSchedulableJob.isIgnorePastFiresAtStart()); scheduleJob(cronSchedulableJob); }