java⽣成cron表达式
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(\ } } }
//按每⽉
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(\ } }
//⽉份
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)); } }