SpringBoot+quartz實現定時任務
阿新 • • 發佈:2018-12-18
首先明白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/