一、quartz的基本概念
1、Job
表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(JobExecutionContext context)
2、JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
3、Trigger代表一个调度参数的配置,什么时候去调。
4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
二、源码
1、pom:
<!-- quartz定时器-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<!--依赖:spring对schedule的支持-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
2、配置类:job+trigger+scheduler
/** job指定处理什么操作、trigger指定什么时候执行、scheduler用于注册触发器trigger */
package com.insight.hr.timer.test;
import com.insight.hr.timer.test.QuartzTask;
import org.quartz.JobDetail;
import org.quartz.Trigger;
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;
/**
* 配置任务
* author zhihf
* deprecated
*/
@Configuration
public class QuartzConfiguration {
/**
* 配置任务
* @param quartzTask QuartzTask为需要执行的任务
* @return
*/
@Bean(name = "reptilianJob")
public MethodInvokingJobDetailFactoryBean detailFactoryBean(QuartzTask quartzTask) {
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
// 是否并发执行
jobDetail.setConcurrent(true);
// 设置任务的名字
jobDetail.setName("reptilianJob");
// 设置任务的分组,在多任务的时候使用
jobDetail.setGroup("reptilianJobGroup");
// 需要执行的对象
jobDetail.setTargetObject(quartzTask);
/*
* TODO 非常重要
* 执行QuartzTask类中的需要执行方法
*/
jobDetail.setTargetMethod("reptilian");
return jobDetail;
}
/**
* 定时触发器
* @param reptilianJob 任务
* @return
*/
@Bean(name = "jobTrigger")
public CronTriggerFactoryBean cronJobTrigger(JobDetail reptilianJob){
CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
tigger.setJobDetail(reptilianJob);
//cron表达式,每天10、15、20发送
tigger.setCronExpression("0 0 10,15,20 * * ?");
tigger.setName("reptilianTrigger");
return tigger;
}
/**
* 调度工厂
* @param jobTrigger 触发器
* @return
*/
@Bean(name = "scheduler")
public SchedulerFactoryBean schedulerFactory(Trigger jobTrigger) {
SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
// 用于quartz集群,QuartzScheduler 启动时更新己存在的Job
factoryBean.setOverwriteExistingJobs(true);
// 延时启动,应用启动1秒后
factoryBean.setStartupDelay(1);
// 注册触发器
factoryBean.setTriggers(jobTrigger);
return factoryBean;
}
}
3、job逻辑处理类
package com.insight.hr.timer.test;
import com.insight.hr.email.web.MailController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
* 使用quartz框架
*/
@Service
public class QuartzTask {
@Autowired
MailController mailController;
/**
* 业务逻辑
*/
public void reptilian(){
System.out.println("执行定时任务:发送邮件"+new Date());
// 定时发送邮件
mailController.sendInlineResourceMail();
}
}