1
我正在研究用Quartz調度我的應用程序,但在所有情況下,作業觸發器似乎都是一次性活動,並且對觸發器的更改需要重新部署應用程序生效。
有沒有什麼辦法可以讓我的作業觸發器檢查作業調度的更改,而無需重新部署代碼?
謝謝,
改變Quartz作業時間表
我正在研究用Quartz調度我的應用程序,但在所有情況下,作業觸發器似乎都是一次性活動,並且對觸發器的更改需要重新部署應用程序生效。
有沒有什麼辦法可以讓我的作業觸發器檢查作業調度的更改,而無需重新部署代碼?
謝謝,
改變Quartz作業時間表
使用新觸發器再次安排作業。
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);
}
你如何安排你的工作(在代碼中)?在運行時重新安排作業是完全可能的。 –
目前,我將調度程序放入servlet的'init'方法中。我想要做的就是以特定的時間間隔從外部資源包中讀取CronTrigger,並使用該值刷新觸發器。 – Debojit