書接上回,上回說到,我們已經將頁面的時間設置轉為了Cron Expression,下面我記錄了時間規則。
3) 記錄時間規則
我將時間規則存入數據庫中,目的是為了生成歷史日志,也可以存入XML文件中。當然您也可以省略此步,直接將轉換後的規則放入相應的Quartz trigger中。
4) 更新任務觸發器的時間設置
到了關鍵的一步了,也是最簡單的一步,一個方法就可以實現了。
首先,我們需要通過trigger的名稱得到一個CronTriggerBean;
其次,通過trigger的setCronExpression(String cronExp)方法將新的表達式注入;
最後,RESCHEDULE THE JOB,OK!
1 /** */ /**
2 * 自定義定時器調度時間
3 * @param triggerName 觸發器名稱
4 * @throws Exception
5 */
6 public void updateNotificationInterval(String triggerName, String triggerId)
7 throws SchedulerException, ParseException {
8 // 得到trigger
9 CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger(
10 triggerName, Scheduler.DEFAULT_GROUP);
11 // 得到cron expression
12 String cronExpression = schedulerDAO.getCronExpression(triggerId);
13 // 設置trigger的時間規則
14 trigger.setCronExpression(cronExpression);
15 // 重置job
16 scheduler.rescheduleJob(triggerName, Scheduler.DEFAULT_GROUP, trigger);
17 }
18
至此,目的達到了,快樂的看著您的任務在您自定義的時間下快樂的執行,您是否也想像'Happy Feet'中那只快樂的企鵝一樣,Show段踢踏呢 ; - D
PS:忘了說我的Quartz任務是怎麼配置的了,罪過,罪過。
< bean id ="compareJob"
class ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
< property name ="targetObject" ref ="compareService" />
< property name ="targetMethod" value ="compare" />
< property name ="concurrent" value ="false" />
</ bean >
< bean id ="compareTrigger"
class ="org.springframework.scheduling.quartz.CronTriggerBean" >
< property name ="jobDetail" ref ="compareJob" />
< property name ="cronExpression" >
< value > 0 39 16 20 * ? </ value >
</ property >
</ bean >
< bean id ="schedulerFactory"
class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
< property name ="triggers" >
< list >
< ref local ="compareTrigger" />
</ list >
</ property >
</ bean >