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 * * * ?
结果