2018-03-28
springboot-集成定时器quartz
springboot 评论:0 浏览:343

转载请注明出处: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());
    }
    
}

 

 



  • 转载请注明出处:https://oldnoop.tech/c/183.html

Copyright © 2018 oldnoop.tech. All Rights Reserved

鄂ICP备2023022735号-1