程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring Quartz如何動態配置時間(2)

Spring Quartz如何動態配置時間(2)

編輯:關於JAVA

上回說到,我們的設置頁面已經做好了,接下來就是將時間轉換為Unix Cron Expression。

2) 將時間轉換為Unix Cron Expression

需要ActionForm將頁面表單數據映射到Action中,然後在Action中轉換為cron expression:

1 SchedulerForm schedulerForm = (SchedulerForm) form;
2     String jobName = schedulerForm.getJobName();
3     String cronExpression =  "" ;
4     String[] commonNeeds =  {schedulerForm.getSecond(), schedulerForm.getMinute(), schedulerForm.getHour()} ;
5     String[] monthlyNeeds =  {schedulerForm.getWeek(), schedulerForm.getDayOfMonth()} ;
6     String weeklyNeeds = schedulerForm.getDayOfWeek();
7     String userDefinedNeeds = schedulerForm.getDate();
8     String everyWhat = schedulerForm.getEveryWhat();
9     // 得到時間規則
10     cronExpression = CronExpConversion.getCronExpression(everyWhat, commonNeeds,
11         monthlyNeeds, weeklyNeeds, userDefinedNeeds);
12 

我定義了一個 規則類來處理轉換規則(寫得不是很好 能用就行 嘿嘿)

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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved