经历太低谷后,仍是要好好学习,越失落会愈来愈落后。html
今天写一下Cron表达式的用法,虽然是以前本身写的,也过了挺长一段时间,此次就拿出来做为回顾吧。学习
Cron表达式是Quartz的精髓(我的以为),好比咱们想设定淘宝“秒杀”的那一秒时间,彻底能够用下面的方法设置执行时间。网站
Calendar cal = Calendar.getInstance(); //设置将要发生的时间... cal.set(Calendar.DATE, xxx); //.......常规的生成scheduler和job //Trigger设置为这个日期 Trigger trigger = TriggerBuilder.newTrigger().startAt(cal.getTime()).build(); //接着仍是通常的流程
能够百度或者参加我前一篇博客《Java EE学习--Quartz基本用法》了解一下Quartz最简单的用法。ui
这里说到Cron表达式:好比公司天天上下班打卡,一周周末检查工做完成状况,网站每个月统计用户数据,等等,这些状况想经过一个Date来设置,很是的麻烦,并且会开大量的实例,影响效率。spa
咱们仍是举一个最简单的例子,继承Job类,重写一个execute方法:code
public class MyJob3 implements Job { public void execute(JobExecutionContext ctx) throws JobExecutionException { System.out.println("It's Time for me to run!!WUHA╰_╯"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("now time is:"+format.format(new Date())); } }
而后,使用CronTrigger来实现带Cron表达式的触发器:orm
public static void main(String[] args) throws Exception { SchedulerFactory factory = new StdSchedulerFactory(); Scheduler sche = factory.getScheduler(); JobDetail job = JobBuilder.newJob(MyJob3.class).build(); //cron表达式说明 /* * 六个或七个单元 * 秒 分 时 月中天 月份 月中星期几 (年) * 秒,分,时,天 * 字段 容许值 容许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可选) 留空, 1970-2099 , - * / * 符号说明 星号:表示任意时刻 问号:只能在日或周字段上使用,简单的理解就是日期和星期是有冲突的,指定其中一个的话,另一个是没办法指定的,好比每月12号和每一个星期二,这两个是"互斥"的,不能用日期和周来指定全部“每一个是星期二的12号”这个时间。 减号:范围,如 1-5秒 逗号:列表,如 1,5,10 秒 斜杠:等步长序列,如3/13秒 表示 3,16,29,42,55,3,16... L:仅在日和周上支持,表示容许的最后一个值,注意不要让范围和列表与L连用 W:工做日 井号:为给定月份指定具体的工做日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。 */ //秒 分 时 月中天 月份 月中星期几 (年) String cron = "0/10 * * 8W 8 ? 2008-2015"; CronTrigger trigger = TriggerBuilder.newTrigger(). withSchedule(CronScheduleBuilder.cronSchedule(cron)).build(); System.out.println("now is:"+new Date()); sche.scheduleJob(job,trigger); sche.start(); Thread.sleep(180*1000); sche.shutdown(); }
很简单的把Cron用法在代码中的注释写了,你们能够在百度上搜索具体的用法,这里我复制别人的没有意思,能够参见http://xgw1008.blog.163.com/blog/static/567573562009316011544/htm
月份和日期都是从1开始的,不是从0,通常你常规认为的时间是几月几号,在Cron中就应该写多少。blog
以个人继承
0/10 * * 8W 8 ? 2008-2015
做说明:
从2008年到2015年(实际中年份可不写),8月份距离8号最近的工做日(几号后面加W,今天,若是是9W,那么仍是取最近的工做日,仍是今天),倒数第二个是?号表示和已经写上去的8号互斥,每时每分,从0秒开始每隔10秒触发(秒数除以10余0),效果以下:
now is:Fri Aug 08 10:07:41 CST 2014 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:07:50 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:08:00 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:08:10 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:08:20 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:08:30 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:08:40 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:08:50 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:09:00 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:09:10 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:09:20 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:09:30 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:09:40 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:09:50 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:10:00 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:10:10 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:10:20 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:10:30 It's Time for me to run!!WUHA╰_╯ now time is:2014-08-08 10:10:40
彻底是按照已制定的想法来的,每隔10秒显示一次,Quartz的功能真的很是强大!