@Test public void createWithoutJobDetail() throws ParseException { CronTriggerFactoryBean factory = new CronTriggerFactoryBean(); factory.setName("myTrigger"); factory.setCronExpression("0 15 10 ? * *"); factory.afterPropertiesSet(); CronTrigger trigger = factory.getObject(); assertEquals("0 15 10 ? * *", trigger.getCronExpression()); }
public void init() { try { MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); jobDetail.setTargetObject(transactionRecovery); jobDetail.setTargetMethod("startRecover"); jobDetail.setName("transactionRecoveryJob"); jobDetail.setConcurrent(false); jobDetail.afterPropertiesSet(); CronTriggerFactoryBean cronTrigger = new CronTriggerFactoryBean(); cronTrigger.setBeanName("transactionRecoveryCronTrigger"); cronTrigger.setCronExpression(transactionConfigurator.getRecoverConfig().getCronExpression()); cronTrigger.setJobDetail(jobDetail.getObject()); cronTrigger.afterPropertiesSet(); scheduler.scheduleJob(jobDetail.getObject(), cronTrigger.getObject()); scheduler.start(); } catch (Exception e) { throw new SystemException(e); } }
/** * * @return * @throws ParseException */ public CronTrigger build() throws ParseException { triggerFactoryBean.afterPropertiesSet(); return triggerFactoryBean.getObject(); } }
@Override public Trigger buildTrigger(JobTrigger jobTrigger, JobDetail jobDetail) { Preconditions.checkArgument(isApplicable(jobTrigger.getClass()), "Not supported jobTrigger type: " + jobTrigger.getClass()); cronTriggerFactoryBean.setCronExpression(((CronJobTrigger) jobTrigger).getCronExpression()); cronTriggerFactoryBean.setJobDetail(jobDetail); cronTriggerFactoryBean.setGroup(jobDetail.getKey().getGroup()); cronTriggerFactoryBean.setName(jobDetail.getKey().getName()); Map<String, Object> triggerInstance = new HashMap<String, Object>(); triggerInstance.put(JOB_TRIGGER_CLASS, CronJobTrigger.class.getName()); triggerInstance.put(JOB_TRIGGER_INSTANCE, convertToList((CronJobTrigger) jobTrigger)); jobDetail.getJobDataMap().putAll(triggerInstance); // This not work // cronTriggerFactoryBean.setJobDataAsMap(triggerInstance); try { cronTriggerFactoryBean.afterPropertiesSet(); } catch (ParseException e) { throw new GeneralServiceException(e); } return cronTriggerFactoryBean.getObject(); }
/** * 通过工厂类创建Trigger * @param jobDetailFactoryBean * @return * @throws ParseException */ @Bean(name = "cronTriggerBean") public Trigger cronTriggerBean(MethodInvokingJobDetailFactoryBean jobDetailFactoryBean) throws ParseException { CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean(); cronTriggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject()); cronTriggerFactoryBean.setCronExpression("0/3 * * * * ?");//每3秒执行一次 cronTriggerFactoryBean.setName("customCronTrigger"); cronTriggerFactoryBean.afterPropertiesSet(); return cronTriggerFactoryBean.getObject(); }
@Bean public SchedulerFactoryBean scheduler() { SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setDataSource(dataSource); schedulerFactoryBean.setTransactionManager(transactionManager); schedulerFactoryBean.setJobFactory(jobFactory()); schedulerFactoryBean.setWaitForJobsToCompleteOnShutdown(true); schedulerFactoryBean.setJobDetails(dataSourceCheckJob().getObject(), dataSourceIngestionCheckJob().getObject(), dataSourceSizeCheckJob().getObject(), incrementalJob().getObject(), tempDataSourceCleanJob().getObject(), calculatePopularityJob().getObject(), notebookKillKernelJob().getObject(), tempCSVFileCleanJob().getObject(), timeoutWorkbenchConnectionCloseJob().getObject()); schedulerFactoryBean.setTriggers(dataSourceCheckTrigger().getObject(), dataSourceIngestionCheckTrigger().getObject(), dataSourceSizeCheckTrigger().getObject(), tempDataSourceCleanTrigger().getObject(), calculatePopularityTrigger().getObject(), notebookKillKernelTrigger().getObject(), tempCSVFileCleanTrigger().getObject(), timeoutWorkbenchConnectionCloseTrigger().getObject()); return schedulerFactoryBean; }
/** * 根据参数,创建对应的CronTrigger对象 * * @param job * @param time * @param name * @param groupName * @param description * @return */ public static CronTrigger createCronTrigger(JobDetail job, String time, String name, String groupName, String description) { factoryBean.setName(name); factoryBean.setJobDetail(job); factoryBean.setCronExpression(time); factoryBean.setDescription(description); factoryBean.setGroup(groupName); try { factoryBean.afterPropertiesSet(); } catch (ParseException e) { e.printStackTrace(); } return factoryBean.getObject(); } }
public SchedulerFactoryBean build() throws Exception { SchedulerFactoryBean bean = new SchedulerFactoryBean(); PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); propertiesFactoryBean.setLocation(new ClassPathResource(config)); propertiesFactoryBean.afterPropertiesSet(); Properties props = propertiesFactoryBean.getObject(); List<Trigger> triggers = Lists.newArrayList(); List<JobModel> jobList = getJobs(props); for (JobModel job : jobList) { if (!job.isEnable()) { continue; } JobDetailFactoryBean detail = createJobDetail(job.getName(), Class.forName(job.getJob())); CronTriggerFactoryBean trigger = createCronTrigger(job.getName(), detail.getObject(), job.getCorn()); CronTrigger t = trigger.getObject(); triggers.add(t); } bean.setTriggers(triggers.toArray(new Trigger[0])); //bean.afterPropertiesSet(); return bean; }
@Override public void triggerWorkflowScheduling(SchedulerFactoryBean schedulerBean, WorkflowSchedule ws) { try { final CronTriggerFactoryBean triggerBean = workflowRegistry.setUpTrigger(ws.getId(), ws.getServerUrl(), ws.getWorkflowKey(), ws.getArguments(), ws.getCronDetails(), ws.getStartDateTime(), ws.getEndDateTime()); schedulerBean.getScheduler().scheduleJob((JobDetail) triggerBean.getJobDataMap().get("jobDetail"), triggerBean.getObject()); } catch (Exception e) { logger.error(EELFLoggerDelegate.errorLogger, "Error scheduling work flow with Id" + ws.getId(), e); } }
@Override public List<Trigger> triggerWorkflowScheduling() { Date date = new Date(); List<Trigger> triggers = new ArrayList<>(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if (getDataAccessService() != null) { @SuppressWarnings("unchecked") List<WorkflowSchedule> allWorkflows = getDataAccessService() .executeQuery("From WorkflowSchedule where endDateTime > '" + dateFormat.format(date) + "'", null); for (WorkflowSchedule ws : allWorkflows) { logger.info(EELFLoggerDelegate.debugLogger, "Workflow Scheduled " + ws.getId() + "/ End Time: " + ws.getEndDateTime()); try { final CronTriggerFactoryBean triggerBean = workflowRegistry.setUpTrigger(ws.getId(), ws.getServerUrl(), ws.getWorkflowKey(), ws.getArguments(), ws.getCronDetails(), ws.getStartDateTime(), ws.getEndDateTime()); triggers.add(triggerBean.getObject()); } catch (Exception e) { logger.error(EELFLoggerDelegate.errorLogger, "Error scheduling work flow with Id" + ws.getId(), e); } } } return triggers; }
public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactory, Long id, String cronExpression, Date startDateTime, Date enddatetime) throws ParseException { CronTriggerFactoryBean cronTriggerFactory = new CronTriggerFactoryBean(); cronTriggerFactory.setJobDetail(jobDetailFactory.getObject()); cronTriggerFactory.setStartDelay(3000); cronTriggerFactory.setName(triggerName + "_" + id); cronTriggerFactory.setGroup(groupName); logger.debug(EELFLoggerDelegate.debugLogger, triggerName + " Scheduled: " + cronExpression); cronTriggerFactory.setCronExpression( cronExpression); //"0 * * * * ? *" cronTriggerFactory.afterPropertiesSet(); final CronTriggerImpl cronTrigger = (CronTriggerImpl) cronTriggerFactory.getObject(); cronTrigger.setStartTime(startDateTime == null ? Calendar.getInstance().getTime() : startDateTime); cronTrigger.setEndTime(enddatetime); Date fireAgainTime = cronTrigger.getFireTimeAfter(cronTrigger.getStartTime()); if (fireAgainTime == null) throw new IllegalArgumentException("Cron not added as it may not fire again " + " Expr: " + cronExpression + " End Time: " + cronTrigger.getEndTime()); return cronTriggerFactory; }
return factoryBean.getObject(); } catch (Exception e) { throw new IllegalStateException("Error in creating cron trigger with name '" + triggerName
private void scheduleReport(ReportDefinition reportDef) throws ClassNotFoundException, NoSuchMethodException, ParseException, SchedulerException, Exception { //this is most likely reentrant since the method is private and called from start via plural version. synchronized (m_scheduler) { MethodInvokingJobDetailFactoryBean jobFactory = new MethodInvokingJobDetailFactoryBean(); jobFactory.setTargetObject(this); jobFactory.setTargetMethod("runReport"); jobFactory.setArguments(new Object[] { reportDef }); jobFactory.setConcurrent(false); jobFactory.setBeanName(reportDef.getDescription()); jobFactory.afterPropertiesSet(); JobDetail jobDetail = (JobDetail) jobFactory.getObject(); CronTriggerFactoryBean cronReportTrigger = new CronTriggerFactoryBean(); cronReportTrigger.setBeanName(reportDef.getDescription()); cronReportTrigger.setJobDetail(jobDetail); cronReportTrigger.setCronExpression(reportDef.getCronExpression()); cronReportTrigger.afterPropertiesSet(); m_scheduler.scheduleJob(jobDetail, cronReportTrigger.getObject()); LOG.debug("Schedule report {}", cronReportTrigger); } }