spring項目如何使用quartz執行多個定時任務


依賴

<!--   定時器   -->
     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-quartz</artifactId>
     </dependency>

 

配置文件

package com.sundear.demo;

import com.sundear.Timing.*;
import org.quartz.JobDetail;
 
@Configuration
public class QuartzConfiguration {

    // 配置定時任務1
    @Bean(name = "firstJobDetail")
    public MethodInvokingJobDetailFactoryBean firstJobDetail(TimingByDay timingByDay) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        // 是否並發執行
        jobDetail.setConcurrent(true);
        // 為需要執行的實體類對應的對象
        jobDetail.setTargetObject(timingByDay);
        // 需要執行的方法
        jobDetail.setTargetMethod("task");
        return jobDetail;
    }

    // 配置觸發器1
    @Bean(name = "firstTrigger")
    public CronTriggerFactoryBean firstTrigger(JobDetail firstJobDetail) {
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
      trigger.setJobDetail(firstJobDetail);
      // 設置定時時間
        trigger.setCronExpression("0 46 15 * * ? 2020");
        return trigger;
    }

    // 配置定時任務2
    @Bean(name = "secondJobDetail")
    public MethodInvokingJobDetailFactoryBean secondJobDetail(TimingByWeek timingByWeek) {
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        // 是否並發執行
        jobDetail.setConcurrent(true);
        // 為需要執行的實體類對應的對象
        jobDetail.setTargetObject(timingByWeek);
        // 需要執行的方法
        jobDetail.setTargetMethod("task");
        return jobDetail;
    }

    // 配置觸發器2
    @Bean(name = "secondTrigger")
    public CronTriggerFactoryBean secondTrigger(JobDetail secondJobDetail) {
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
        trigger.setJobDetail(secondJobDetail);
        trigger.setCronExpression("0 24 19 * * ? 2020");
        return trigger;
    }

    // 配置Scheduler
    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactory
    (Trigger firstTrigger, Trigger secondTrigger,Trigger thirdTrigger,
     Trigger forthTrigger,Trigger fifthTrigger) {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        // 延時啟動,應用啟動5秒后
        bean.setStartupDelay(5);
        // 注冊觸發器
        bean.setTriggers(firstTrigger,secondTrigger,thirdTrigger);
        return bean;
    }
}

把定時任務綁定在對應的代碼上

@Component
@EnableScheduling

public class TimingByDay {

//要定時執行的代碼

}

@Component
@EnableScheduling

public class TimingByWeek {

//要定時執行的代碼

}

springboot項目啟動類需要加上 @EnableScheduling,啟動定時任務


免責聲明!

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



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