Quartz
一、引言
1.1 简介
Quartz:http://www.quartzscheduler.org/
是一个定时任务调度框架。比如你遇到这样的问题:
- 想在30分钟后,查看订单是否支付,未支付则取消订单
- 想在每月29号,信用卡自动还款
- …
- 想定时在某个时间,去做某件事(任务)。
Quartz是要做定时任务的调度,设置好触发时间规则,以及相应的任务(Job)即可。
二、Quartz使用
2.1 导入依赖
<dependencies>
<!--Quartz任务调度-->
<!--https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
</dependencies>
2.2 定义Job
/**
* 工作类的具体实现,即需要定时执行的"某件事"
*/
public class HelloQuartz implements Job{
//执行
public void execute(JobExecutionContext context) throws JobExecutionException {
//创建工作详情
JobDetail jobDetail = context.getJobDetail();
//获取工作的名称
String jobName = jobDetail.getKey().getName();//任务名
String jobGroup = jobDetail.getKey().getGroup();//任务group
System.out.println("job执行,job:"+jobName+"group:"+jobGroup);
System.out.println(new Date());
}
}
2.3 API测试
public static void main(String[] args) {
try{
//创建scheduler,调度器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//定义一个Trigger,触发条件类
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity()
.startNow()//一旦加入scheduler,立即生效,即开始计时
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1)//每隔一秒执行一次
.repeatForever())//一直执行,知道结束时间
.endAt(new GregorianCalendar(2019,7,15,16,7,0).getTime())//设置结束时间
.build();
//定义一个JobDetail
//定义Job类为HelloQuartz类,这是真正的执行逻辑所在
JobDetail job = JobBuilder.newJob(HelloQuartz.class)
.withIdentity("job1","group1")//定义name/group
.build();
//调度器中加入任务和触发器
scheduler.scheduleJob(job,trigger);
//启动任务调度
scheduler.start