規則類來處理轉換規則(寫得不是很好 能用就行 嘿嘿)
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