简介:
在百度百科介绍:
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目
Quartz是一个完全由java编写的开源作业调度框架。不要让作业调度这个术语吓着你。尽管Quartz框架整合了许多额外功能, 但就其简易形式看,你会发现它易用得简直让人受不了!简单地创建一个实现org.quartz.Job接口的java类。Job接口包含唯一的方法:
我感觉就是人物定时器,方便我们执行一些动态却要定时执行的业务逻辑,比如说我一个秒杀需要在某时某分去开启抢购 就可拿这个Quartz去做。
时间表达式:
在线解析
https://cron.qqe2.com/
Quartz的使用
job 是任务 作业
Trigger 是触发器
schedur 任务调度 调度工厂
boot整合Quartz需要的依赖
<!-- quartz 使用了该jar包PlatformTransactionManager类 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<!-- 该依赖里面有spring对schedule的支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
创建一个boot项目把上面的依赖放到pom里面
在boot项目中创建Quartz的配置类
package com.tangsir.tangquartz.config;
import com.tangsir.tangquartz.task.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;
import org.springframework.stereotype.Controller;
@Configuration
public class QuartzConfiguration {
/**
* 配置任务
* @param quartzTask
* @return
*/
@Bean(name = "reptilianJob")
public MethodInvokingJobDetailFactoryBean detailFactoryBean(QuartzTask quartzTask) {
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
// 是否并发执行
jobDetail.setConcurrent(false);
// 设置任务的名字
jobDetail.setName("reptilianJob");
// 设置任务的分组,在多任务的时候使用
jobDetail.setGroup("reptilianJobGroup");
// 需要执行的对象
jobDetail.setTargetObject(quartzTask);
/*
*
* 执行QuartzTask类中的需要执行方法
*/
jobDetail.setTargetMethod("test");
return jobDetail;
}
/**
* 定时触发器
* @param reptilianJob 任务
* @return
*/
@Bean(name = "jobTrigger")
public CronTriggerFactoryBean cronJobTrigger(JobDetail reptilianJob){
CronTriggerFactoryBean tigger = new CronTriggerFactoryBean();
tigger.setJobDetail(reptilianJob);
//cron表达式,每1分钟执行一次
tigger.setCronExpression("0/1 * * * * ?");
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;
}
}
调用
package com.tangsir.tangquartz.task;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class QuartzTask {
/**
* 业务逻辑
*/
void test(){
System.out.println("我来调用来了:"+new Date());
}
}
这里就是一秒调一次