spring boot整合quartz實現多個定時任務


 

版權聲明:本文為博主原創文章,轉載請注明出處。 https://blog.csdn.net/liuchuanhong1/article/details/78543574

最近收到了很多封郵件,都是想知道spring boot整合quartz如何實現多個定時任務的,由於本人生產上並沒有使用到多個定時任務,這里給個實現的思路。

1、新建兩個定時任務,如下:

 

  1.  
    public class ScheduledJob implements Job{
  2.  
    @Override
  3.  
    public void execute(JobExecutionContext context) throws JobExecutionException {
  4.  
    System.out.println( "schedule job1 is running…………………………………… ");
  5.  
    }
  6.  
    }

  1.  
    public class ScheduledJob2 implements Job {
  2.  
     
  3.  
    @Override
  4.  
    public void execute(JobExecutionContext context) throws JobExecutionException {
  5.  
    System.out.println( "schedule job2 is running ……………………………………………………");
  6.  
    }
  7.  
    }

2、配置以上兩個任務

 

 

  1.  
    @Component
  2.  
    public class SchedulerAllJob {
  3.  
    @Autowired
  4.  
    private SchedulerFactoryBean schedulerFactoryBean;
  5.  
     
  6.  
    /*
  7.  
    * 此處可以注入數據庫操作,查詢出所有的任務配置
  8.  
    */
  9.  
     
  10.  
    /**
  11.  
    * 該方法用來啟動所有的定時任務
  12.  
    * @throws SchedulerException
  13.  
    */
  14.  
    public void scheduleJobs() throws SchedulerException {
  15.  
    Scheduler scheduler = schedulerFactoryBean.getScheduler();
  16.  
     
  17.  
    /**
  18.  
    *
  19.  
    */
  20.  
    scheduleJob1(scheduler);
  21.  
    scheduleJob2(scheduler);
  22.  
    }
  23.  
     
  24.  
    /**
  25.  
    * 配置Job1
  26.  
    * 此處的任務可以配置可以放到properties或者是放到數據庫中
  27.  
    * 如果此時需要做到動態的定時任務,請參考:http://blog.csdn.net/liuchuanhong1/article/details/60873295
  28.  
    * 博客中的ScheduleRefreshDatabase類
  29.  
    * @param scheduler
  30.  
    * @throws SchedulerException
  31.  
    */
  32.  
    private void scheduleJob1(Scheduler scheduler) throws SchedulerException{
  33.  
    /*
  34.  
    * 此處可以先通過任務名查詢數據庫,如果數據庫中存在該任務,則按照ScheduleRefreshDatabase類中的方法,更新任務的配置以及觸發器
  35.  
    * 如果此時數據庫中沒有查詢到該任務,則按照下面的步驟新建一個任務,並配置初始化的參數,並將配置存到數據庫中
  36.  
    */
  37.  
    JobDetail jobDetail = JobBuilder.newJob(ScheduledJob.class) .withIdentity( "job1", "group1").build();
  38.  
    // 每5s執行一次
  39.  
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule( "0/5 * * * * ?");
  40.  
    CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity( "trigger1", "group1") .withSchedule(scheduleBuilder).build();
  41.  
    scheduler.scheduleJob(jobDetail,cronTrigger);
  42.  
    }
  43.  
     
  44.  
    /**
  45.  
    * 配置Job
  46.  
    * @param scheduler
  47.  
    * @throws SchedulerException
  48.  
    */
  49.  
    private void scheduleJob2(Scheduler scheduler) throws SchedulerException{
  50.  
    JobDetail jobDetail = JobBuilder.newJob(ScheduledJob2.class) .withIdentity( "job2", "group1").build();
  51.  
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule( "0/10 * * * * ?");
  52.  
    // 每10s執行一次
  53.  
    CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity( "trigger2", "group1") .withSchedule(scheduleBuilder).build();
  54.  
    scheduler.scheduleJob(jobDetail,cronTrigger);
  55.  
    }
  56.  
    }

3、啟動兩個任務

 

 

  1.  
    @Configuration
  2.  
    @EnableScheduling
  3.  
    @Component
  4.  
    public class SchedulerListener {
  5.  
     
  6.  
    @Autowired
  7.  
    public SchedulerAllJob myScheduler;
  8.  
     
  9.  
    /**
  10.  
    * 啟動的時候執行該方法,或者是使用ApplicationListener,在啟動的時候執行該方法
  11.  
    * 具體使用見:http://blog.csdn.net/liuchuanhong1/article/details/77568187
  12.  
    * @throws SchedulerException
  13.  
    */
  14.  
    @Scheduled(cron="0 08 18 ? * *")
  15.  
    public void schedule() throws SchedulerException {
  16.  
    myScheduler.scheduleJobs();
  17.  
    }
  18.  
     
  19.  
    @Bean
  20.  
    public SchedulerFactoryBean schedulerFactoryBean(){
  21.  
    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
  22.  
    return schedulerFactoryBean;
  23.  
    }
  24.  
    }

4、測試結果如下

 

 

  1.  
    schedule job1 is running……………………………………
  2.  
    schedule job2 is running ……………………………………………………
  3.  
    schedule job1 is running……………………………………
  4.  
    schedule job1 is running……………………………………
  5.  
    schedule job2 is running ……………………………………………………
  6.  
    schedule job1 is running……………………………………
  7.  
    schedule job1 is running……………………………………
  8.  
    schedule job2 is running ……………………………………………………
  9.  
    schedule job1 is running……………………………………
  10.  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM