java cron 表达式 每小时_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(",").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));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值