SpringQuartz如何动态配置时间(2)

上回说到,我们的设置页面已经做好了,接下来就是将时间转换为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 * CronExpConversion5  */6  public  class CronExpConversion  {7  8    /** */ /**9   * 页面设置转为UNIX cron expressions 转换算法10   * @param everyWhat11   * @param commonNeeds 包括 second minute hour12   * @param monthlyNeeds 包括 第几个星期 星期几13   * @param weeklyNeeds 包括 星期几14   * @param userDefinedNeeds 包括具体时间点15   * @return cron expression16    */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 the26       // month)27       dayOfWeek = monthlyNeeds[ 1 ]28           + CronExRelated.specialCharacters29               .get(CronExRelated._THENTH) + monthlyNeeds[ 0 ];30       cronEx = (commons31           + CronExRelated.specialCharacters.get(CronExRelated._ANY)32           +  "  "33           + CronExRelated.specialCharacters.get(CronExRelated._EVERY)34           +  "  "  + dayOfWeek +  "  " ).trim();35     }  else  if ( " weekly " .equals(everyWhat))  {36       dayOfWeek = weeklyNeeds; // 137       cronEx = (commons38           + 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。

每一件事都要用多方面的角度来看它

SpringQuartz如何动态配置时间(2)

相关文章:

你感兴趣的文章:

标签云: