規則類來處理轉換規則(寫得不是很好 能用就行 嘿嘿)
1
2
/** */
/**
3 * 頁面設置轉爲UNIX cron expressions 轉換類
4 * CronExpConversion
5 */
6
public
class
CronExpConversion
{
7
8 /** */ /**
9 * 頁面設置轉爲UNIX cron expressions 轉換算法
10 * @param everyWhat
11 * @param commonNeeds 包括 second minute hour
12 * @param monthlyNeeds 包括 第幾個星期 星期幾
13 * @param weeklyNeeds 包括 星期幾
14 * @param userDefinedNeeds 包括具體時間點
15 * @return cron expression
16 */
17 public static String convertDateToCronExp(String everyWhat,
18 String[] commonNeeds, String[] monthlyNeeds, String weeklyNeeds,
19 String userDefinedNeeds) {
20 String cronEx = "" ;
21 String commons = commonNeeds[ 0 ] + " " + commonNeeds[ 1 ] + " "
22 + commonNeeds[ 2 ] + " " ;
23 String dayOfWeek = "" ;
24 if ( " monthly " .equals(everyWhat)) {
25 // eg.: 6#3 (day 6 = Friday and "#3" = the 3rd one in the
26 // month)
27 dayOfWeek = monthlyNeeds[ 1 ]
28 + CronExRelated.specialCharacters
29 .get(CronExRelated._THENTH) + monthlyNeeds[ 0 ];
30 cronEx = (commons
31 + CronExRelated.specialCharacters.get(CronExRelated._ANY)
32 + " "
33 + CronExRelated.specialCharacters.get(CronExRelated._EVERY)
34 + " " + dayOfWeek + " " ).trim();
35 } else if ( " weekly " .equals(everyWhat)) {
36 dayOfWeek = weeklyNeeds; // 1
37 cronEx = (commons
38 + CronExRelated.specialCharacters.get(CronExRelated._ANY)
39 + " "
40 + CronExRelated.specialCharacters.get(CronExRelated._EVERY)
41 + " " + dayOfWeek + " " ).trim();
42 } else if ( " userDefined " .equals(everyWhat)) {
43 String dayOfMonth = userDefinedNeeds.split( " - " )[ 2 ];
44 if (dayOfMonth.startsWith( " 0 " )) {
45 dayOfMonth = dayOfMonth.replaceFirst( " 0 " , "" );
46 }
47 String month = userDefinedNeeds.split( " - " )[ 1 ];
48 if (month.startsWith( " 0 " )) {
49 month = month.replaceFirst( " 0 " , "" );
50 }
51 String year = userDefinedNeeds.split( " - " )[ 0 ];
52 // FIXME 暫時不加年份 Quartz報錯
53 /**/ /* cronEx = (commons + dayOfMonth + " " + month + " "
54 + CronExRelated.specialCharacters.get(CronExRelated._ANY)
55 + " " + year).trim(); */
56 cronEx = (commons + dayOfMonth + " " + month + " "
57 + CronExRelated.specialCharacters.get(CronExRelated._ANY)
58 + " " ).trim();
59 }
60 return cronEx;
61 }
62 }
63
這樣就將頁面的時間設置轉爲了Cron Expression。
書接上回,上回說到,咱們已經將頁面的時間設置轉爲了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 >
THE END