bean類:
package com.cst.klocwork.service.cron; public class TaskScheduleModel { /** * 所選作業類型: * 1 -> 每天 * 2 -> 每月 * 3 -> 每周 * 4 ->間隔(每隔2個小時,每隔30分鍾) */ Integer jobType; /**一周的哪幾天*/ Integer[] dayOfWeeks; /**一個月的哪幾天*/ Integer[] dayOfMonths; /**秒 */ Integer second; /**分 */ Integer minute; /**時 */ Integer hour; public Integer getJobType() { return jobType; } public void setJobType(Integer jobType) { this.jobType = jobType; } public Integer[] getDayOfWeeks() { return dayOfWeeks; } public void setDayOfWeeks(Integer[] dayOfWeeks) { this.dayOfWeeks = dayOfWeeks; } public Integer[] getDayOfMonths() { return dayOfMonths; } public void setDayOfMonths(Integer[] dayOfMonths) { this.dayOfMonths = dayOfMonths; } public Integer getSecond() { return second; } public void setSecond(Integer second) { this.second = second; } public Integer getMinute() { return minute; } public void setMinute(Integer minute) { this.minute = minute; } public Integer getHour() { return hour; } public void setHour(Integer hour) { this.hour = hour; } }
util類:
/** * @ClassName: CronUtil * @Description: Cron表達式工具類 * 目前支持三種常用的cron表達式 * 1.每天的某個時間點執行 例:12 12 12 * * ?表示每天12時12分12秒執行 * 2.每周的哪幾天執行 例:12 12 12 ? * 1,2,3表示每周的周1周2周3 ,12時12分12秒執行 * 3.每月的哪幾天執行 例:12 12 12 1,21,13 * ?表示每月的1號21號13號 12時12分12秒執行 * @author * @date * */ public class CronUtil { /** * *方法摘要:構建Cron表達式 *@param taskScheduleModel *@return String */ public static String createCronExpression(TaskScheduleModel taskScheduleModel){ StringBuffer cronExp = new StringBuffer(""); if(null == taskScheduleModel.getJobType()) { System.out.println("執行周期未配置" );//執行周期未配置 } if (null != taskScheduleModel.getSecond() && null != taskScheduleModel.getMinute() && null != taskScheduleModel.getHour()) { //秒 cronExp.append(taskScheduleModel.getSecond()).append(" "); //分 cronExp.append(taskScheduleModel.getMinute()).append(" "); //小時 cronExp.append(taskScheduleModel.getHour()).append(" "); //每天 if(taskScheduleModel.getJobType().intValue() == 1){ cronExp.append("* ");//日 cronExp.append("* ");//月 cronExp.append("?");//周 } //按每周 else if(taskScheduleModel.getJobType().intValue() == 3){ //一個月中第幾天 cronExp.append("? "); //月份 cronExp.append("* "); //周 Integer[] weeks = taskScheduleModel.getDayOfWeeks(); for(int i = 0; i < weeks.length; i++){ if(i == 0){ cronExp.append(weeks[i]); } else{ cronExp.append(",").append(weeks[i]); } } } //按每月 else if(taskScheduleModel.getJobType().intValue() == 2){ //一個月中的哪幾天 Integer[] days = taskScheduleModel.getDayOfMonths(); for(int i = 0; i < days.length; i++){ if(i == 0){ cronExp.append(days[i]); } else{ cronExp.append(",").append(days[i]); } } //月份 cronExp.append(" * "); //周 cronExp.append("?"); } } else { System.out.println("時或分或秒參數未配置" );//時或分或秒參數未配置 } return cronExp.toString(); } /** * *方法摘要:生成計划的詳細描述 *@param taskScheduleModel *@return String */ public static String createDescription(TaskScheduleModel taskScheduleModel){ StringBuffer description = new StringBuffer(""); //計划執行開始時間 // Date startTime = taskScheduleModel.getScheduleStartTime(); if (null != taskScheduleModel.getSecond() && null != taskScheduleModel.getMinute() && null != taskScheduleModel.getHour()) { //按每天 if(taskScheduleModel.getJobType().intValue() == 1){ description.append("每天"); description.append(taskScheduleModel.getHour()).append("時"); description.append(taskScheduleModel.getMinute()).append("分"); description.append(taskScheduleModel.getSecond()).append("秒"); description.append("執行"); } //按每周 else if(taskScheduleModel.getJobType().intValue() == 3){ if(taskScheduleModel.getDayOfWeeks() != null && taskScheduleModel.getDayOfWeeks().length > 0) { String days = ""; for(int i : taskScheduleModel.getDayOfWeeks()) { days += "周" + i; } description.append("每周的").append(days).append(" "); } if (null != taskScheduleModel.getSecond() && null != taskScheduleModel.getMinute() && null != taskScheduleModel.getHour()) { description.append(","); description.append(taskScheduleModel.getHour()).append("時"); description.append(taskScheduleModel.getMinute()).append("分"); description.append(taskScheduleModel.getSecond()).append("秒"); } description.append("執行"); } //按每月 else if(taskScheduleModel.getJobType().intValue() == 2){ //選擇月份 if(taskScheduleModel.getDayOfMonths() != null && taskScheduleModel.getDayOfMonths().length > 0) { String days = ""; for(int i : taskScheduleModel.getDayOfMonths()) { days += i + "號"; } description.append("每月的").append(days).append(" "); } description.append(taskScheduleModel.getHour()).append("時"); description.append(taskScheduleModel.getMinute()).append("分"); description.append(taskScheduleModel.getSecond()).append("秒"); description.append("執行"); } } return description.toString(); } //參考例子 public static void main(String[] args) { //執行時間:每天的12時12分12秒 start TaskScheduleModel taskScheduleModel = new TaskScheduleModel(); taskScheduleModel.setJobType(1);//按每天 Integer hour = 12; //時 Integer minute = 12; //分 Integer second = 12; //秒 taskScheduleModel.setHour(hour); taskScheduleModel.setMinute(minute); taskScheduleModel.setSecond(second); String cropExp = createCronExpression(taskScheduleModel); System.out.println(cropExp + ":" + createDescription(taskScheduleModel)); //執行時間:每天的12時12分12秒 end taskScheduleModel.setJobType(3);//每周的哪幾天執行 Integer[] dayOfWeeks = new Integer[3]; dayOfWeeks[0] = 1; dayOfWeeks[1] = 2; dayOfWeeks[2] = 3; taskScheduleModel.setDayOfWeeks(dayOfWeeks); cropExp = createCronExpression(taskScheduleModel); System.out.println(cropExp + ":" + createDescription(taskScheduleModel)); taskScheduleModel.setJobType(2);//每月的哪幾天執行 Integer[] dayOfMonths = new Integer[3]; dayOfMonths[0] = 1; dayOfMonths[1] = 21; dayOfMonths[2] = 13; taskScheduleModel.setDayOfMonths(dayOfMonths); cropExp = createCronExpression(taskScheduleModel); System.out.println(cropExp + ":" + createDescription(taskScheduleModel)); } }