博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的quartz表达式
阅读量:7071 次
发布时间:2019-06-28

本文共 3938 字,大约阅读时间需要 13 分钟。

hot3.png

        项目里面用到定时任务,免不了quartz表达式了解

        其实quartz表达式了解,参考

        关键是了解    

second  minute  hours  dayOfMonth  month  dayOfWeek  year  每月     0       0        6      ?          *       6#3       ?  每周    59       59      18      ?          *        1        ?  自定义  28       47       9      30         7        ?       2006

表达式每个位置控制各自的数值,有可能有7位,也有可能有6位。        

下面是每一个位可用数值

Field Name  Mandatory?  Allowed Values  Allowed Special Characters   Seconds     YES         0-59             , - * /   Minutes     YES         0-59             , - * /   Hours       YES         0-23             , - * /   Day of month  YES       1-31             , - * ? / L W C   Month         YES        1-12 or JAN-DEC  , - * /   Day of week   YES        1-7 or SUN-SAT   , - * ? / L C #   Year          NO  empty, 1970-2099        , - * /
看了一下表达式写个简单的js构建quartz cron表达式js ,勉强满足需求,

  

var quartzUtil = (function() {	return {		/**		 * 数据获取,从data获取到key的值,没有就返回默认值		 */		getValue : function(data, key, def) {			if (typeof(data[key]) == 'undefined') {				return def;			} else {				if (data[key]) {					return data[key];				} else {					return def;				}			}		},		/**		 * 表达式转换		 * data定义		 * 		 * 		 * 		 */		parse : function(data) {			var parseArray = [];			var rate = data["rate"];			switch (rate) {				//每年				case "year" :				//0  0  0  10  12    ?    *					var hour = quartzUtil.getValue(data, "hour", "0");					var min = quartzUtil.getValue(data, "min", "0");					var second = quartzUtil.getValue(data, "second", "0");					var day=quartzUtil.getValue(data, "day", "0");					var month=quartzUtil.getValue(data, "month", "0");					var rtn = [second, min,hour , day, month,"*","?"];					return rtn.join(" ");					break;				//每月				case "month" :					//"0 15 10 15 * ?" 					var hour = quartzUtil.getValue(data, "hour", "0");					var min = quartzUtil.getValue(data, "min", "0");					var second = quartzUtil.getValue(data, "second", "0");					var day=quartzUtil.getValue(data, "day", "1");					var rtn = [second, min,hour , day, "*", "?"];					return rtn.join(" ");					break;				//每星期					case "week" :					var hour = quartzUtil.getValue(data, "hour", "0");					var min = quartzUtil.getValue(data, "min", "0");					var second = quartzUtil.getValue(data, "second", "0");					var week = quartzUtil.getValue(data, "week", "error");					if(week=="error"){						alert("error");						return ;					}					var rtn = [second, min,hour , "?", "*", week];					return rtn.join(" ");					//0 0 12 ? * WED					break;				//每天				case "day" :					var hour = quartzUtil.getValue(data, "hour", "0");					var min = quartzUtil.getValue(data, "min", "0");					var second = quartzUtil.getValue(data, "second", "0");					var rtn = [second, min,hour , "*", "*", "?"];					return rtn.join(" ");					break;				//每小时				case "hour" :				//59 30 * * * ?					var min = quartzUtil.getValue(data, "min", "0");					var second = quartzUtil.getValue(data, "second", "0");					var rtn = [second, min,"*" , "*", "*", "?"];					return rtn.join(" ");					break;				//每分钟					case "min" :					var second = quartzUtil.getValue(data, "second", "0");					var rtn = [second, "*","*" , "*", "*", "?"];					return rtn.join(" ");					break;				default :					break;			}		}	}})();
整个例子上传到

后台spring 解析,根据表达式计算下次运行的时间

/**	 * 根据 spring cron express 表达式,输入时间获取下次时间	 * @description TODO	 * @param express 表达式	 * @param date 时间	 * @return 下次时间	 */	public static Date getNextDate(String express, Date date) {		Assert.notNull(express, "express is null");		Assert.notNull(date, "date is null");		// SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");		CronSequenceGenerator cg = new CronSequenceGenerator(/*"0 0 0 1 1/6 *"*/express,				TimeZone.getDefault());		return cg.next(date);	}		public static void main(String[] args) {			System.out.println(Utils.getNextDate("0 0 0 1 1/6 *", null));		System.out.println(Utils.getNextDate("0 0 0 1 1/6 *",Utils.getNextDate("0 0 0 1 1/6 *", new Date())));			}

转载于:https://my.oschina.net/fattian/blog/132786

你可能感兴趣的文章
#HTTP协议学习# (十)拓展-HTTPS协议
查看>>
电梯调度 最终版
查看>>
mysql索引详解(转)
查看>>
php html 静态化 缓存
查看>>
测试架构师修炼之道:“秘书九段”的故事 - 延伸至测试六段
查看>>
Silverlight数据验证
查看>>
Ubuntu始终是外国的,为什么大家这么力推?
查看>>
iOS开发滚动视图UIScrollView
查看>>
SSH服务及其扩展(sshpass和expect)
查看>>
mysql中的锁
查看>>
会话Cookie与session的关系
查看>>
Blend ---- 自定义ImageButton(图片按钮)
查看>>
04-模板层
查看>>
Beta冲刺-第二天
查看>>
call 和 apply方法解析
查看>>
Update emacs to 23.2 on Ubuntu
查看>>
C#中结构(struct)与类(class)的区别
查看>>
mount loop最大数的调整
查看>>
Android的消息机制(1)
查看>>
树的创建与遍历
查看>>