1.添加依赖
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.opensymphony.quartz</groupId>
<artifactId>quartz-all</artifactId>
<version>1.6.1</version>
</dependency>
2.定义Job
具体执行的任务类需要实现Job接口,并在其中的execute方法写需要定时执行的方法
public class MyJob implements Job{
Logger logger = LoggerFactory.getLogger(MyJob.class);
public void execute(JobExecutionContext arg0) throws JobExecutionException {
logger.info("{} task is start", new Date());
}
}
3.使用SimpleTrigger作为触发器
触发器就是用来定义任务何时执行、执行间隔、执行次数等信息的类,每个job都对应一个或者多个trigger
@Test
public void test() throws SchedulerException, InterruptedException {
JobDetail jobDetail = new JobDetail("firstJob", "myGroup", MyJob.class);
SimpleTrigger trigger = new SimpleTrigger("firstJob", "myGroup");
trigger.setStartTime(new Date());
trigger.setRepeatInterval(2000);
trigger.setRepeatCount(1);
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
Thread.sleep(10*1000l);
}
结果为:
[DefaultQuartzScheduler_Worker-1] INFO com.mycompany.quartz.MyJob - Sun Jun 07 15:13:57 CST 2015 task is start
[DefaultQuartzScheduler_Worker-1] INFO com.mycompany.quartz.MyJob - Sun Jun 07 15:13:59 CST 2015 task is start
注意:其中的repeatCount是重复次数,如果只执行一次就设置为0
3.使用CronTrigger作为触发器
@Test
public void testCron() throws SchedulerException, InterruptedException, ParseException {
JobDetail jobDetail = new JobDetail("firstJob", "myGroup", MyJob.class);
CronTrigger trigger = new CronTrigger("firstJob", "myGroup");
trigger.setCronExpression("0/5 * * * * ? ");
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
Thread.sleep(10*1000l);
}
cron表达式:
(1)*:*表示的就是所有,也就是“每”。如用在分钟字段表示每分钟
(2)?:就是不确定,一般用在日期和星期
(3)-:表示范围,如用在小时10-12,表示10点、11点、12点
(4),:表示枚举,也就是说把所有可能的值列出来
(5)/:x/y表示从x开始,每y执行一次。如0/15用在秒,表示0,15,30,45秒执行;3/15表示3,18,33,48.....执行
4.总结
所有的Quartz程序偶由3部分组成
(1)Job
具体执行的任务需要实现Job接口,具体的实现类是JobDetail
(2)Trigger
和Job对应,指定Job的执行时间和间隔、次数等信息
(3)Schedule
调度用的类,根据trigger来执行相应的job