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)); }
}
java生成cron表达式的更多相关文章
- Java Spring cron表达式使用详解
Java Spring cron表达式使用详解 By:授客 QQ:1033553122 语法格式 Seconds Minutes Hours DayofMonth Month DayofWeek ...
- 按时间间隔生成cron表达式
cron表达式是使用任务调度经常使用的表达式了.对于通常的简单任务,我们只需要一条cron表达式就能满足.但是有的时候任务也可以很复杂. 最近我遇到了一个问题,一条任务在开始的时候要触发A方法,在结束 ...
- 指定时间生成cron表达式
public class CronUtils { private static final SimpleDateFormat sdf = new SimpleDateFormat("ss m ...
- quartz cron表达式在线生成
近期使用了quartz定时器,有感于起cron表达式有点复杂.且无法实时推断定时时间是否正确,因此写了个在线表达式及依据表达式获得前10次运行时间. 訪问地址例如以下:http://cron.g2ro ...
- quartz.net 时间表达式----- Cron表达式详解
序言 Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无 ...
- 通过Quartz 配置定时调度任务:使用cron表达式配置时间点
Cron官网入口 在后台经常需要一些定时处理的任务,比如微信相关应用所需的access_token,就要定时刷新,官方返回的有效性是7200s,也就是2小时,但是为了保险起见,除了在发现access_ ...
- Quartz Cron表达式的二三事
最近在解决产品上的一个需求,就是定期生成报告(Report),我们叫做Scheduled Report. 原理:UI获取用户输入的时间信息,后台使用Spring框架设置定时任务,这里定时任务用的就是 ...
- 详解定时任务中的 cron 表达式
1.前言 我们经常使用 cron 表达式来定义定时任务的执行策略,今天我们就总结一下 cron 表达式的一些相关知识. 2. cron 表达式的定义 cron 表达式是一个字符串,该字符串由 6 个空 ...
- 使用Cron表达式创建定时任务
CronTriggerCronTrigger功能非常强大,是基于日历的作业调度,而SimpleTrigger是精准指定间隔,所以相比SimpleTrigger,CroTrigger更加常用.CroTr ...
随机推荐
- request/response解决中文乱码!!!
Request中文乱码问题以及解决方案 补充三个知识点: Get是URL解码方式.默认解码格式是Tomcat编码格式.所以URL解码是UTF-8,覆盖掉了request容器解码格式 Post是实体内容 ...
- Java 网络编程 - 总结概述
IP地址 IP地址IntAddress 唯一定位一台网络上的计算机 127.0.0.1:本地localhost IP地址的分类 ipV4/ipV6 ipV4:127.0.0.1,4个字节组成:0~25 ...
- vue事件绑定
事件绑定 vue官方文档:<https://cn.vuejs.org/v2/guide/events.html#%E4%BA%8B%E4%BB%B6%E4%BF%AE%E9%A5%B0%E7%A ...
- 学习JS的第一天--初识JS
1.初识JS a.我的第一个JS程序: document.write("Hello JS")://这段代码是输出到body中就是直接打开就可以看到: console.log(&qu ...
- Spring 之 BeanFactory 源码 - 抽象/类 分析
BeanFactory的基本类体系结构(类为主):
- 微信小程序(五)
JavaScript: JavaScript 是一种轻量的,解释型的,面对对象的头等函数语言,是一种动态的基于原型和多范式的脚本语言,支持面向对象,命令式和函数式的编程风格. Nodejs 中的Jav ...
- SpringCloud升级之路2020.0.x版-40. spock 单元测试封装的 WebClient(上)
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们来测试下前面封装好的 WebClient,这里开始,我们使用 spock 编写 gro ...
- [hdu7065]Yinyang
将一个格子看作一个节点,相邻(有公共边)的同色格子之间连边,那么由前两个条件即要求图恰被分为两个非空连通块(由于$n,m\ge 3$,显然不能不使用某种颜色) 下面,来分析图中的简单环,其对应于网格图 ...
- [bzoj1105]石头花园
首先$C/2=x_{max}+y_{max}-x_{min}-y_{min}=max(x_{max},y_{max})-min(x_{min},y_{min})+min(x_{max},y_{max} ...
- 从零开始学Kotlin第一课
Kotlin的方法: 一个简单的计算器: fun main(args:Array<String>){ //主函数main方法 var a=8; var b=9; println(plus( ...