Trigger
触发器:Trigger,包括:SimpleTrigger和CronTrigger
SimpleTrigger
SimpleTrigger可以实现在一个指定时间段内执行一次作业任务或一个时间段内多次执行作业任务
public class MySimpleSchedule {
public static void main(String[] args) throws SchedulerException, InterruptedException {
// 可以指定时间
Date startDate = new Date();
startDate.setTime(startDate.getTime() + 5000);
Date endDate = new Date();
endDate.setTime(startDate.getTime() + 5000);
// 1. 构建Trigger 实例,间隔执行
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
.startNow() // 开始执行,至少执行一次
// 默认会一直执行,限制:添加间隔时间, 共执行5次
// .startAt(startDate)
// .endAt(endDate)
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2) // 间隔1s 执行一次
.repeatForever()).build(); // 重复执行
// 2. 创建jobDetail, 绑定需执行的类
JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
.withIdentity("job1", "group1").build();
// 3. 创建调度器
// SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// 执行, 两个参数:规避并发访问
scheduler.scheduleJob(jobDetail, trigger);
System.out.println("--------- scheduler start ---------");
scheduler.start();
// 睡眠, 1分钟后
// TimeUnit.MINUTES.sleep(1);
Thread.sleep(10000);
scheduler.shutdown();
System.out.println("--------scheduler shutdown ------------");
}
}
CronTrigger
基于日历的作业调度:秒-分-小时-日-月-周-年
public class MyCronSchedule {
public static void main(String[] args) throws SchedulerException, InterruptedException {
// 可以指定时间
Date startDate = new Date();
startDate.setTime(startDate.getTime() + 5000);
Date endDate = new Date();
endDate.setTime(startDate.getTime() + 5000);
// 1. 构建Trigger 实例,间隔执行
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
.usingJobData("trigger1", "jobDetail1的trigger")
// .startNow()
// .startAt(startDate)
// .endAt(endDate)
.withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ? *"))
.build();
// 2. 创建jobDetail, 绑定需执行的类
JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
.withIdentity("job1", "group1").build();
// 3. 创建调度器
// SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// 执行, 两个参数:规避并发访问
scheduler.scheduleJob(jobDetail, trigger);
System.out.println("--------- scheduler start ---------");
scheduler.start();
// 睡眠, 1分钟后
// TimeUnit.MINUTES.sleep(1);
Thread.sleep(10000);
scheduler.shutdown();
System.out.println("--------scheduler shutdown ------------");
}
}
public class test {
@Scheduled(cron="*/1 * * * * ?")
public void method(){
System.out.println(new Date());
}
}