繁体   English   中英

更改石英作业计划

[英]Altering Quartz Job Schedule


我正在考虑使用Quartz调度我的应用程序,但是在所有情况下,作业触发器似乎都是一次性活动,对触发器的更改需要重新部署应用程序才能生效。
有什么方法可以使作业触发器检查作业时间表的更改而无需重新部署代码?
谢谢,

  1. 陷阱一些用户驱动的事件,例如更新文本值,例如cron字符串以安排作业
  2. 找到并取消安排/删除旧作业并触发。
  3. 使用新的触发器再次安排作业。

     public static <T> T scheduleCronJob(Class<T> clazz, String cronString, String uid){ try{ if(cronString == null){ throw new CronStringConfigurationException(); } String jobGroupName = "cronJobsGroup"; String jobName = "cronJob" + uid; String triggerGroupName = "cronTriggers"; String triggerName = "triggerFor" + uid; JobDetail jobDetail = new JobDetail(jobName, jobGroupName, clazz); CronTrigger trigger = new CronTrigger( triggerName, triggerGroupName, jobName, jobGroupName, cronString); JobDataMap jobDataMap = new JobDataMap(); jobDetail.setJobDataMap(jobDataMap); getScheduler().scheduleJob(jobDetail, trigger); } catch(Exception e){ // print error message, throw stack trace } return null; } public static void reloadCronJob(Class clazz, String cronString, String uid) throws SystemException, ParseException, SchedulerException, CronStringConfigurationException, PortalException{ // locate the job String jobGroupName = "cronJobs"; String jobName = "jobFor" + uid; if(cronString == null){ throw new CronStringConfigurationException(); } JobDetail jobDetail = null; Class<?> jobClass = null; // remove the old job/trigger if it exists try{ jobDetail = scheduler.getJobDetail(jobName, jobGroupName); if(jobDetail != null){ jobClass = jobDetail.getJobClass(); } scheduler.deleteJob(jobName, jobGroupName); } catch(Exception e){ e.printStackTrace(); } if(jobClass == null){ jobClass = clazz; } // create a new trigger scheduleCronJob(jobClass, expandoColumnName, uid); System.out.println("(re)scheduled job " + jobName + " using new cron string " + cronString); } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM