經歷太低谷後,仍是要好好學習,越失落會愈來愈落後。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的功能真的很是強大!