Quartz入門(mén)(三) --Cron Trigger

Quartz入門(mén)(三) --Cron Trigger

Cron Trigger是Quartz最重要的特色之一,通過(guò)Cron表達(dá)式可以確定某類(lèi)時(shí)間,完成類(lèi)似“每個(gè)星期五”,“每天10:00"這種定時(shí)的任務(wù)

還是看例子
MyJob類(lèi)是要執(zhí)行的任務(wù)啊,這里保持不變

package ThirdDemo;

import org.quartz.*;

import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * Created by CiCi on 2017/5/2.
 */
public class MyJob3 implements Job{
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String jobName = jobExecutionContext.getJobDetail().getKey().getName();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH時(shí)mm分ss秒");

        System.out.println("任務(wù)Key" + jobName + "正在執(zhí)行,執(zhí)行時(shí)間" + dateFormat.format(Calendar.getInstance().getTime()));
    }
}

package ThirdDemo;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;



/**
 * Created by CiCi on 2017/5/2.
 */
public class QuartzCronTest {
    public static void main(String[] args) throws SchedulerException {
        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler scheduler = factory.getScheduler();

        JobDetail job = JobBuilder.newJob(MyJob3.class).withIdentity("Job","group1").build();
        CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger","group1").withSchedule(CronScheduleBuilder.cronSchedule("0 0 18 * * ?" )).build();

        scheduler.scheduleJob(job,trigger);
        scheduler.start();

        try {
            Thread.sleep(60L * 1000L);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
/* 
-------------------------------------- 
    0 0 12 * * ?            每天12點(diǎn)觸發(fā) 
    0 15 10 ? * *           每天10點(diǎn)15分觸發(fā) 
    0 15 10 * * ?           每天10點(diǎn)15分觸發(fā) 
    0 15 10 * * ? *         每天10點(diǎn)15分觸發(fā) 
    0 15 10 * * ? 2005      2005年每天10點(diǎn)15分觸發(fā) 
    0 * 14 * * ?            每天下午的 2點(diǎn)到2點(diǎn)59分每分觸發(fā) 
    0 0/5 14 * * ?          每天下午的 2點(diǎn)到2點(diǎn)59分(整點(diǎn)開(kāi)始,每隔5分觸發(fā)) 
    0 0/5 14,18 * * ?       每天下午的 2點(diǎn)到2點(diǎn)59分(整點(diǎn)開(kāi)始,每隔5分觸發(fā)) 每天下午的 18點(diǎn)到18點(diǎn)59分(整點(diǎn)開(kāi)始,每隔5分觸發(fā)) 
    0 0-5 14 * * ?          每天下午的 2點(diǎn)到2點(diǎn)05分每分觸發(fā) 
    0 10,44 14 ? 3 WED      3月分每周三下午的 2點(diǎn)10分和2點(diǎn)44分觸發(fā) 
    0 15 10 ? * MON-FRI     從周一到周五每天上午的10點(diǎn)15分觸發(fā) 
    0 15 10 15 * ?          每月15號(hào)上午10點(diǎn)15分觸發(fā) 
    0 15 10 L * ?           每月最后一天的10點(diǎn)15分觸發(fā) 
    0 15 10 ? * 6L          每月最后一周的星期五的10點(diǎn)15分觸發(fā) 
    0 15 10 ? * 6L 2002-2005    從2002年到2005年每月最后一周的星期五的10點(diǎn)15分觸發(fā) 
    0 15 10 ? * 6#3         每月的第三周的星期五開(kāi)始觸發(fā) 
    0 0 12 1/5 * ?          每月的第一個(gè)中午開(kāi)始每隔5天觸發(fā)一次 
    0 11 11 11 11 ?         每年的11月11號(hào) 11點(diǎn)11分觸發(fā)(光棍節(jié)) 
-------------------------------------- 
 */  

Quartz Cron 表達(dá)式支持到七個(gè)域

  • 秒 0-59 , - * /
  • 分 0-59 , - * /
  • 時(shí) 0-23 , - * /
  • 日 1-31 , - * ? / L W
  • 月 1-12 或 JAN-DEC , - * /
  • 周 1-7 或 SUN-SAT , - * ? / L #
  • 年 空 或 1970-2099 , - * /
    其中前五項(xiàng)是必選的,周和年是可選的

其次,通配符,主要的有星號(hào)();問(wèn)號(hào)?;減號(hào)-;逗號(hào),;斜杠/;L字母W字母;井號(hào)(#)*.

星號(hào):表示任意時(shí)刻
問(wèn)號(hào):只能在日或周字段上使用,http://blog.csdn.net/chh_jiang/article/details/4603529 這里有比較清晰的解釋?zhuān)?jiǎn)單的理解就是日期和星期是有沖突的,指定其中一個(gè)的話,另外一個(gè)是沒(méi)辦法指定的,比如每個(gè)月12號(hào)和每個(gè)星期二,這兩個(gè)是"互斥"的,不能用日期和周來(lái)指定所有“每個(gè)是星期二的12號(hào)”這個(gè)時(shí)間。
減號(hào):范圍,如 1-5秒
逗號(hào):列表,如 1,5,10 秒
斜杠:等步長(zhǎng)序列,如3/13秒 表示 3,16,29,42,55,3,16...
L:僅在日和周上支持,表示允許的最后一個(gè)值,注意不要讓范圍和列表與L連用
W:工作日
井號(hào):為給定月份指定具體的工作日實(shí)例。把“MON#2”放在周內(nèi)日期字段中,表示把任務(wù)安排在當(dāng)月的第二個(gè)星期一。

That's all. Thank U~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容