首先明白Quartz核心概念会变得很容易理解配置.
1、Job
表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(JobExecutionContext context)
2、JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
3、Trigger代表一个调度参数的配置,什么时候去调。
4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
以下是主要的配置类
@Configuration
public class SchedledConfiguration {
@Bean(name = "detailFactoryBean")
public MethodInvokingJobDetailFactoryBean detailFactoryBean(ScheduledTasks scheduledTasks){
MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean ();
//这儿设置对应的Job对象
bean.setTargetObject (scheduledTasks);
//这儿设置对应的方法名 与执行具体任务调度类中的方法名对应
bean.setTargetMethod ("work");
bean.setConcurrent (false);
return bean;
}
@Bean(name = "cronTriggerBean")
public CronTriggerFactoryBean cronTriggerBean(MethodInvokingJobDetailFactoryBean detailFactoryBean){
CronTriggerFactoryBean trigger = new CronTriggerFactoryBean ();
trigger.setJobDetail (detailFactoryBean.getObject ());
try {
trigger.setCronExpression ("0/5 * * ? * *");//每5秒执行一次
} catch (ParseException e) {
e.printStackTrace ();
}
return trigger;
}
@Bean
public SchedulerFactoryBean schedulerFactory(CronTriggerFactoryBean cronTriggerBean){
SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean ();
schedulerFactory.setTriggers(cronTriggerBean.getObject());
return schedulerFactory;
}
}
以下是具体执行调度任务的类
@Component
@Configurable
@EnableScheduling
public class ScheduledTasks {
public void work(){
//这儿插入具体的调度任务
}
}
总结:
总的说来,quartz的配置类主要就是以下三点.
(1)JobDetail(MethodInvokingJobDetailFactoryBean)的配置需要Job这个参数(具体执行调度任务的类,也就是例子中的ScheduledTasks ).
(2)Trigger(CronTriggerFactoryBean)的配置需要JobDetail这个参数.同时需要配置cron表达式,这个下面谈.
(3)Scheduler(SchedulerFactoryBean)的配置需要Trigger这个参数.
PS:
cron表达式具体的东西可以网上搜,很多的,在这只说我碰到的一个问题,cron表达式的第4位和第6位有一位必须是?
错误示例:
0 0 0 * * * 这个期望表达的意思是每天0点调度一个任务,但是这样写会报错.
0 0 0 ? * *或者0 0 0 * * ? 这两种表达都是每天0点调度一个任务,这样写才是正确的
这篇文章参照了以下三篇文章:
http://www.itnose.net/detail/6149670.html
http://blog.csdn.net/u010623907/article/details/46684515
http://lavasoft.blog.51cto.com/62575/181907/