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)); }
}

  

java生成cron表达式的更多相关文章

  1. Java Spring cron表达式使用详解

    Java Spring cron表达式使用详解   By:授客 QQ:1033553122 语法格式 Seconds Minutes Hours DayofMonth Month DayofWeek ...

  2. 按时间间隔生成cron表达式

    cron表达式是使用任务调度经常使用的表达式了.对于通常的简单任务,我们只需要一条cron表达式就能满足.但是有的时候任务也可以很复杂. 最近我遇到了一个问题,一条任务在开始的时候要触发A方法,在结束 ...

  3. 指定时间生成cron表达式

    public class CronUtils { private static final SimpleDateFormat sdf = new SimpleDateFormat("ss m ...

  4. quartz cron表达式在线生成

    近期使用了quartz定时器,有感于起cron表达式有点复杂.且无法实时推断定时时间是否正确,因此写了个在线表达式及依据表达式获得前10次运行时间. 訪问地址例如以下:http://cron.g2ro ...

  5. quartz.net 时间表达式----- Cron表达式详解

    序言 Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无 ...

  6. 通过Quartz 配置定时调度任务:使用cron表达式配置时间点

    Cron官网入口 在后台经常需要一些定时处理的任务,比如微信相关应用所需的access_token,就要定时刷新,官方返回的有效性是7200s,也就是2小时,但是为了保险起见,除了在发现access_ ...

  7. Quartz Cron表达式的二三事

    最近在解决产品上的一个需求,就是定期生成报告(Report),我们叫做Scheduled Report. 原理:UI获取用户输入的时间信息,后台使用Spring框架设置定时任务,这里定时任务用的就是  ...

  8. 详解定时任务中的 cron 表达式

    1.前言 我们经常使用 cron 表达式来定义定时任务的执行策略,今天我们就总结一下 cron 表达式的一些相关知识. 2. cron 表达式的定义 cron 表达式是一个字符串,该字符串由 6 个空 ...

  9. 使用Cron表达式创建定时任务

    CronTriggerCronTrigger功能非常强大,是基于日历的作业调度,而SimpleTrigger是精准指定间隔,所以相比SimpleTrigger,CroTrigger更加常用.CroTr ...

随机推荐

  1. 几个你不知道的dubbo注册中心细节

    你会正确配置backup地址吗? 在配置dubbo注册中心时,一般会这样写 dubbo.registry.protocol=zookeeper dubbo.registry.address=127.0 ...

  2. 12组-Alpha冲刺-4/6

    侯钦凯 过去两天完成了哪些任务 完善UI界面,复习考试 展示GitHub当日代码/文档签入记录 接下来的计划 复习考试,准备答辩 还剩下哪些任务 博客和答辩 燃尽图(团队整体) 遇到了哪些困难 在部分 ...

  3. 12组-Alpha冲刺-2/6

    一.基本情况 队名:字节不跳动 组长博客:https://www.cnblogs.com/147258369k/p/15535639.html 小组人数:10人 二.冲刺概况汇报 侯钦凯 过去两天完成 ...

  4. js实现全选与全部取消功能

    function checkAll() { //把所有参与选择的checkbox使用相同的name,这里为"num_iid"    var eles = document.getE ...

  5. 网络带宽和速度测试windows和linux用iperf工具

    网络带宽和速度测试windows和linux用iperf工具   Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性 ...

  6. 带allow-create的el-select限制长度

    需求:给el-select添加新增字段长度限制且新增内容不能为空 1.首先给el-select绑定一个id(例如:selectSku),这个id会传到组件里面,绑定在那个input上面, <el ...

  7. [bzoj1101]Zap

    1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 50001 4 int t,n,m,k,ans,mu[N],vis ...

  8. [loj6500]操作

    差分,令$b_{i}=a_{i-1}\oplus a_{i}$,对于一个区间$[l,r]$,相当于令$a_{l-1}=a_{r+1}=0$之后求出$b_{l..r+1}$,对区间$[i-k,i)$异或 ...

  9. MS17-010漏洞利用

    MS17-010漏洞利用 1.安装虚拟机win7 x64,实现利用ms17-010实现对其win7 x64主机开始渗透,查看该主机信息,打开远程桌面,抓取用户名和密码并破译,创建一个 : 学号.txt ...

  10. Github树型插件--Octotree

    octotree 是一款chrome插件,用于将 GitHub 项目代码以树形格式展示,而且在展示的列表中,我们可以下载指定的文件,而不需要下载整个项目. 官网地址:https://www.octot ...