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分触发(光棍节)

猜你喜欢

转载自blog.csdn.net/panleiaiying/article/details/70851538