SpringBoot+quartz实现定时任务

首先明白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/

猜你喜欢

转载自blog.csdn.net/qq_15144655/article/details/67637749