quartz 時間觸發器-02

public class SimpleJob implements Job{
    private static Logger log = org.slf4j.LoggerFactory.getLogger(HelloJob.class);  
    public void execute(JobExecutionContext context) throws JobExecutionException {
        // TODO Auto-generated method stub
        JobKey key = context.getJobDetail().getKey();
        log.info(key+"正在執行:"+new Date());
    }

}
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

import java.util.Date;

import org.quartz.CronTrigger;
import org.quartz.DateBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.panlei.quartz.example1.SimpleDemo;

public class SimpleTriggerDemo {

    public void run() throws SchedulerException {
        Logger log = LoggerFactory.getLogger(SimpleDemo.class);
        /**
         * 執行一次
         */
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1").build();

        // 10s 後執行
        Date startTime = DateBuilder.nextGivenSecondDate(null, 10);
        SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
                .startAt(startTime).build();

        // 執行11次, (執行1次重複10次)
        // 每10s 執行一次
        /*trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger3", "group1").startAt(startTime)
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).withRepeatCount(10)).build();*/

        // 在之後的50s執行
        //trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger4", "group1").startAt(DateBuilder.futureDate(50,IntervalUnit.SECOND)).build();

        // 時間表達式方式
        /*CronTrigger trigger2 = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0/20 * * * * ?"))
                .build();*/

        Date ft = sched.scheduleJob(job, trigger);
        log.info(job.getKey() + " 執行時間 :" + ft + " 重複次數:" + trigger.getRepeatCount() + "次 , 每 "
                + trigger.getRepeatInterval() / 1000 + "s一次");

        sched.start();
    }

    public static void main(String[] args) throws SchedulerException {
        SimpleTriggerDemo demo = new SimpleTriggerDemo();
        demo.run();
    }
}

時間表達式格式:

格式: [秒] [分] [小時] [日] [月] [周] [年]
        0 0 12 * * ?           每天12點觸發
        0 15 10 ? * *          每天1015分觸發
        0 15 10 * * ?          每天1015分觸發 
        0 15 10 * * ? *        每天1015分觸發 
        0 15 10 * * ? 2005     2005年每天1015分觸發
        0 * 14 * * ?           每天下午的 2點到259分每分觸發
        0 0/5 14 * * ?         每天下午的 2點到259分(整點開始,每隔5分觸發) 
        0 0/5 14,18 * * ?        每天下午的 18點到1859分(整點開始,每隔5分觸發)

        0 0-5 14 * * ?            每天下午的 2點到205分每分觸發
        0 10,44 14 ? 3 WED        3月分每週三下午的 210分和244分觸發
        0 15 10 ? * MON-FRI       從週一到週五每天上午的1015分觸發
        0 15 10 15 * ?            每月15號上午1015分觸發
        0 15 10 L * ?             每月最後一天的1015分觸發
        0 15 10 ? * 6L            每月最後一週的星期五的1015分觸發
        0 15 10 ? * 6L 2002-20052002年到2005年每月最後一週的星期五的1015分觸發

        0 15 10 ? * 6#3           每月的第三週的星期五開始觸發
        0 0 12 1/5 * ?            每月的第一個中午開始每隔5天觸發一次
        0 11 11 11 11 ?           每年的11111111分觸發(光棍節)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章