由於現有cron生成頁面過於複雜,因此簡化爲下圖所示
注意:按每週執行時,選擇的週一 需要傳2,週二-3,週三-4,週四-5,週五-6,週六-7,週日-1,按照該對應關係纔可。
對應的轉換cron工具類如下
package com.develop.common.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @ClassName: CronUtil
* @author bxf
* @date 2020-6-30 16:09:09
*
*/
public class CronUtil {
/**
* 方法摘要:構建Cron表達式
* @param type 類型 0:每天一次;1:每週一次;2:每月一次
* @param param1 下拉列表,根據type進行變換, type=0時,param1=0;type=1時,param1從1-7選;type=2時,param1從1-28選
* @param param2 小時 0-23
* @param param3 分鐘 0-59
* @return
*/
public static String createLoopCronExpression(int type,int param1,int param2,int param3) {
String cron = "";
switch (type) {
case 0:// 每天的param2時,param3分執行
cron = "0 "+ param3+" "+param2+" * * ? ";
break;
case 1:// 每週的param1的param2時,param3分執行
cron = "0 "+param3+" "+param2+" ? * "+param1+" *";
break;
case 2:// 每月的param1號的param2時,param3分執行
cron = "0 "+param3+" "+param2+" "+param1+" * ? *";
break;
}
return cron;
}
/**
* 方法摘要:構建Cron描述
* @param type 類型 0:每天一次;1:每週一次;2:每月一次
* @param param1 下拉列表,根據type進行變換, type=0時,param1=0;type=1時,param1從1-7選;type=2時,param1從1-28選
* @param param2 小時 0-23
* @param param3 分鐘 0-59
* @return
*/
public static String createLoopCronDescription(int type,int param1,int param2,int param3) {
String desc = "";
switch (type) {
case 0:// 每天的param2時,param3分執行
desc = "每天" + param2 + "點"+param3+"分觸發一次任務";
break;
case 1:// 每週的param1的param2時,param3分執行
desc = "每週"+param1+"的"+param2+"點"+param3+"分觸發一次任務";
break;
case 2:// 每月的param1號的param2時,param3分執行
desc = "每月"+param1+"號的"+param2+"點"+param3+"分觸發一次任務";
break;
}
return desc;
}
/**
* 通過輸入指定日期時間生成cron表達式
* @param date
* @return cron表達式
*/
public static String getCron(Date date){
String dateFormat="ss mm HH dd MM ? *";
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String formatTimeStr = null;
if (date != null) {
formatTimeStr = sdf.format(date);
}
return formatTimeStr;
}
// 參考例子
public static void main(String[] args) {
System.out.println(CronUtil.createLoopCronExpression(0,0,10,50));
System.out.println(CronUtil.createLoopCronDescription(0,0,10,50));
System.out.println(CronUtil.createLoopCronExpression(1,2,12,40));
System.out.println(CronUtil.createLoopCronDescription(1,2,12,40));
System.out.println(CronUtil.createLoopCronExpression(2,28,07,30));
System.out.println(CronUtil.createLoopCronDescription(2,28,07,30));
}
}