Spring Boot 使用 JAVA 根据时间和定时器类型获取自定义corn规则表达式

为了方便书写调度相关任务,写了一个自定义根据前端上传的任务类型及时间获取自定义corn表达式的案例,仅供参考

1.定义model

public class TaskScheduleModel {

    /**
     * 所选作业类型:
     * 0  -> 每分钟
     * 1  -> 每小时
     * 2  -> 每天
     * 3  -> 每周
     * 4  -> 每月
     * 5  -> 每年
     */
    private Integer jobType;
    //启动时间
    private String startDate;

    public Integer getJobType() {
        return jobType;
    }

    public void setJobType(Integer jobType) {
        this.jobType = jobType;
    }

    public String getStartDate() {
        return startDate;
    }

    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }
}

2.获取表达式

/**
     * 方法摘要:构建Cron表达式
     *
     * @param taskScheduleModel
     * @return String
     */
    public static String createCronExpression(TaskScheduleModel taskScheduleModel) throws Exception{

        //拆分时间字符串 年,月,日,时,分,秒
        String[] split1 = taskScheduleModel.getStartDate().split(" |-|:");


        StringBuffer cronExp = new StringBuffer("");

        if (null == taskScheduleModel.getJobType()) {
            System.out.println("执行周期未配置");//执行周期未配置
        }

        if (null != split1[5] && null != split1[4] && null != split1[3]) {

            if(taskScheduleModel.getJobType().intValue() == 0){

                //秒
                cronExp.append(split1[5]).append(" ");

                //每分钟
                cronExp.append("* ").append(" ");
                cronExp.append("* ");//小时
                cronExp.append("* ");//日
                cronExp.append("* ");//月
                cronExp.append("?");//周
            }else if(taskScheduleModel.getJobType().intValue() == 1){

                //秒
                cronExp.append(split1[5]).append(" ");
                //分
                cronExp.append(split1[4]).append(" ");

                //每小时
                cronExp.append("* ");//小时
                cronExp.append("* ");//日
                cronExp.append("* ");//月
                cronExp.append("?");//周
            }else if(taskScheduleModel.getJobType().intValue() == 2 || taskScheduleModel.getJobType().intValue() == 3 ||
                    taskScheduleModel.getJobType().intValue() == 4 || taskScheduleModel.getJobType().intValue() == 5){

                //秒
                cronExp.append(split1[5]).append(" ");
                //分
                cronExp.append(split1[4]).append(" ");
                //时
                cronExp.append(split1[3]).append(" ");
            }

            //按每日
            if (taskScheduleModel.getJobType().intValue() == 2) {

                cronExp.append("* ");//日
                cronExp.append("* ");//月
                cronExp.append("?");//周
            }
            //按每周
            else if (taskScheduleModel.getJobType().intValue() == 3) {

                String[] split2 = taskScheduleModel.getStartDate().split(" ");
                //获取本周的周几
                int dayForWeek = DataUtils.dayForWeek(split2[0]);
                //一个月中第几天
                cronExp.append("? ");
                //月份
                cronExp.append("* ");
                //周
                cronExp.append(dayForWeek + 1);
            }
            //按每月
            else if (taskScheduleModel.getJobType().intValue() == 4) {
                //一个月中的哪几天
                cronExp.append(split1[2]);
                //月份
                cronExp.append(" * ");
                //周
                cronExp.append("?");
            }
            //按每年
            else if (taskScheduleModel.getJobType().intValue() == 5) {

                //一个月中的哪几天
                cronExp.append(split1[2]).append(" ");
                //月份
                cronExp.append(split1[1]).append(" ");
                //周
                cronExp.append("?");
            }

        } else {
            System.out.println("时或分或秒参数未配置");//时或分或秒参数未配置
        }
        return cronExp.toString();
    }

之前在网上一直没有找到合适的,以上仅供参考。

你可能感兴趣的:(JAVA)