CronTrigger
CronTrigger功能很是强大,是基于日历的做业调度,而SimpleTrigger是精准指定间隔,因此相比SimpleTrigger,CroTrigger更加经常使用。CroTrigger是基于Cron表达式的,先了解下Cron表达式:
由7个子表达式组成字符串的,格式以下:工具
[秒] [分] [小时] [日] [月] [周] [年]测试
Cron表达式的语法比较复杂,
如:* 30 10 ? * 1/5 *
表示(从后往前看)
[指定年份] 的[ 周一到周五][指定月][不指定日][上午10时][30分][指定秒]ui
又如:00 00 00 ? * 10,11,12 1#5 2018
表示2018年十、十一、12月的第一周的星期五这一天的0时0分0秒去执行任务。blog
下面是给的一个例子: 字符串
可经过在线生成Cron表达式的工具:http://cron.qqe2.com/ 来生成本身想要的表达式。 get
public class HelloScheduler{ public static void main(String[] args) throws SchedulerException, InterruptedException { // 一、建立调度器Scheduler SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); // 二、建立JobDetail实例,并与PrintWordsJob类绑定(Job执行内容) JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class) .usingJobData("jobDetail1", "这个Job用来测试的") .withIdentity("job1", "group1").build(); // 三、构建Trigger实例,每隔1s执行一次 Date startDate = new Date(); startDate.setTime(startDate.getTime() + 5000); Date endDate = new Date(); endDate.setTime(startDate.getTime() + 5000); CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1") .usingJobData("trigger1", "这是jobDetail1的trigger") .startNow()//当即生效 .startAt(startDate) .endAt(endDate) .withSchedule(CronScheduleBuilder.cronSchedule("* 30 10 ? * 1/5 2018")) .build(); //四、执行 scheduler.scheduleJob(jobDetail, cronTrigger); System.out.println("--------scheduler start ! ------------"); scheduler.start(); } }