转载请注明出处:https://oldnoop.tech/c/183.html
引入依赖
springboot2.0以上(含2.0)可以引入起步依赖
springboot2.0以下(不含2.0)单独引入quartz的依赖,如有需要,还可以引入quartz-job
编写具体任务类
@Component
public class XxxTask {
//使用cron表达式配置定时器
public void task(){
doTask();
}
private void doTask(){
//编写任务逻辑
}
}
配置quartz的相关类
这里采用注解式配置,不像xml配置,可以直接配置quartz的核心类的bean,
这里采用了继承quartz的核心类的方式来配置,这样可以实现多套不同定时任务的配置,
说明:
这里采用的策略,一个定时任务,使用一个scheduler和trigger,
如果需要共用一个scheduler,
可以只配置一个scheduler,然后将scheduler注入到trigger中,在trigger类中使用scheduler对象添加trigger
配置JobDetail
其实是配置JobDetail的工厂bean
@Component
public class XxxJobDetail extends MethodInvokingJobDetailFactoryBean{
//注入任务类
@Autowired
private XxxTask task;
//注入任务类对象
@Autowired
public void setTargetObject(){
super.setTargetObject(task);
}
//注入任务类对象的任务方法
@Autowired
public void setTargetMethod(){
super.setTargetMethod("task");
}
}
配置Trigger
其实是配置Trigger的工厂bean
@Component
public class XxxCronTrigger extends CronTriggerFactoryBean{
//引入JobDetail,其实是工厂bean
@Autowired
private XxxJobDetail jobDetail;
//调用父类的方法,注入JobDetail实例
@Autowired
private void setJobDetail(){
//这里的jobDetail是工厂模式配置,需要调用getObject拿到具体实例
super.setJobDetail(jobDetail.getObject());
}
//注入cron表达式
@Autowired
private void setCronExpression(){
super.setCronExpression("0 * * * * ?");
}
}
配置Schduler
其实是配置Scheduler的工厂bean
@Component
public class XxxScheduler extends SchedulerFactoryBean{
//引入trigger,其实是trigger的工厂bean
@Autowired
private XxxCronTrigger trigger;
//调用父类的方法,注入trigger
@Autowired
public void setTriggers(){
//这里的trigger是工厂模式配置,需要调用getObject拿到具体实例
super.setTriggers(trigger.getObject());
}
}