spring boot 2.0+集成quartz,线上用过

1、添加依赖

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.3</version>
</dependency>
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.3</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

2、抒写quartz配置类,加载quartz定时工厂

package com.example.springquartz;

import com.example.springquartz.task.JobTest1;
import com.example.springquartz.task.JobTest2;
import org.quartz.Trigger;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Configuration
@Component
public class QuartzConfig {

    @Value("${jobTestTrigger}")
    private String jobTestTrigger;

    @Value("${jobTest2Trigger}")
    private String jobTest2Trigger;

    /**
     * 方法调用任务明细工厂Bean
     */
    @Bean(name = "jobTestBean1")
    public MethodInvokingJobDetailFactoryBean jobBean1(JobTest1 jobTest1){
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        jobDetail.setConcurrent(false); // 是否并发
        jobDetail.setName("job-test1"); // 任务的名字
        jobDetail.setGroup("test"); // 任务的分组
        jobDetail.setTargetObject(jobTest1); // 被执行的对象
        jobDetail.setTargetMethod("doTask"); // 被执行的方法
        return jobDetail;
    }

    /**
     * 表达式触发器工厂Bean
     */
    @Bean(name = "jobTest1BeanTrigger")
    public CronTriggerFactoryBean jobTest1TaskTrigger(@Qualifier("jobTestBean1") MethodInvokingJobDetailFactoryBean jobTestBean1) {
        CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
        tigger.setJobDetail(jobTestBean1.getObject());
        tigger.setCronExpression(jobTestTrigger); // 什么是否触发,Spring Scheduler Cron表达式
        tigger.setName("jobTest1BeanTrigger");
        return tigger;
    }

    @Bean(name = "jobTest2Bean")
    public MethodInvokingJobDetailFactoryBean jobBean2(JobTest2 jobTest2){
        MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
        jobDetail.setConcurrent(false); // 是否并发
        jobDetail.setName("job-test2"); // 任务的名字
        jobDetail.setGroup("test"); // 任务的分组
        jobDetail.setTargetObject(jobTest2); // 被执行的对象
        jobDetail.setTargetMethod("doTask"); // 被执行的方法
        return jobDetail;
    }

    /**
     * 表达式触发器工厂Bean
     */
    @Bean(name = "jobTest2BeanTrigger")
    public CronTriggerFactoryBean jobTest2TaskTrigger(@Qualifier("jobTest2Bean") MethodInvokingJobDetailFactoryBean jobTest2Bean) {
        CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
        tigger.setJobDetail(jobTest2Bean.getObject());
        tigger.setCronExpression(jobTest2Trigger); // 什么是否触发,Spring Scheduler Cron表达式
        tigger.setName("jobTest2BeanTrigger");
        return tigger;
    }

    /**
     * 调度器工厂Bean
     */
    @Bean(name = "schedulerFactory")
    public SchedulerFactoryBean schedulerFactory(@Qualifier("jobTest1BeanTrigger") Trigger jobTest1BeanTrigger,
                                                 @Qualifier("jobTest2BeanTrigger") Trigger jobTest2BeanTrigger) {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        // 覆盖已存在的任务
        bean.setOverwriteExistingJobs(false);
        // 延时启动定时任务,避免系统未完全启动却开始执行定时任务的情况
        bean.setStartupDelay(3);
        //此处可以做成开关形式
        // 判断定时任务是否开器
        List<Trigger> triggers = new ArrayList<>();
        triggers.add(jobTest1BeanTrigger);
        triggers.add(jobTest2BeanTrigger);
        Trigger[] ts = triggers.toArray(new Trigger[0]);

        // 注册触发器
        bean.setTriggers(ts);
        return bean;
    }

}

3、task1

package com.example.springquartz.task;

import org.springframework.stereotype.Component;

@Component
public class JobTest1 {

    public void doTask() {
        System.out.println("task1 is beginning");
    }
}

task2

package com.example.springquartz.task;

import org.springframework.stereotype.Component;

@Component
public class JobTest2 {
    public void doTask() {
        System.out.println("task2 is beginning");
    }
}

4、config.properties

jobTestTrigger=0 */1 * * * ?
jobTest2Trigger=0 */1 * * * ?

结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值