CronTrigger
CronTrigger功能非常強大,是基於日歷的作業調度,而SimpleTrigger是精准指定間隔,所以相比SimpleTrigger,CroTrigger更加常用。CroTrigger是基於Cron表達式的,先了解下Cron表達式:
由7個子表達式組成字符串的,格式如下:
[秒] [分] [小時] [日] [月] [周] [年]
Cron表達式的語法比較復雜,
如:* 30 10 ? * 1/5 *
表示(從后往前看)
[指定年份] 的[ 周一到周五][指定月][不指定日][上午10時][30分][指定秒]
又如:00 00 00 ? * 10,11,12 1#5 2018
表示2018年10、11、12月的第一周的星期五這一天的0時0分0秒去執行任務。
下面是給的一個例子:

可通過在線生成Cron表達式的工具:http://cron.qqe2.com/ 來生成自己想要的表達式。

public class HelloScheduler{
public static void main(String[] args) throws SchedulerException, InterruptedException {
// 1、創建調度器Scheduler
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 2、創建JobDetail實例,並與PrintWordsJob類綁定(Job執行內容)
JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
.usingJobData("jobDetail1", "這個Job用來測試的")
.withIdentity("job1", "group1").build();
// 3、構建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();
//4、執行
scheduler.scheduleJob(jobDetail, cronTrigger);
System.out.println("--------scheduler start ! ------------");
scheduler.start();
}
}
