您的位置:首页 > 其它

Quartz实现任务调度

2018-03-16 20:30 573 查看
       Quartz是java开源的一个定时任务的工具,它本身不仅可以实现固定时间的定时任务计算还可以实现类似Crontab的指定时间点间隔的定时任务计算。这篇文章以代码为主讲述了如何实现Quartz的任务调度。废话不多说,直接上代码~

一、pom.xml文件的配置<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>二、MyJob.java代码package com.xzw.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
*
* @author xzw
*
*/
public class MyJob implements Job{

@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// 实现业务逻辑
System.out.println("Hello everyone, I am xzw.");

}

}

三、TestQuartz.java代码package com.xzw.quartz;

import java.text.ParseException;
import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.CronTriggerImpl;

/**
*
* @author xzw
*
*/
public class TestQuartz {
public void testSimple(){
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//开始
scheduler.start();
//唯一标识
JobKey jobKey = new JobKey("test_1", "test");
JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity(jobKey).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("testTrigger","simpleTrigger")
//延迟一秒执行
.startAt(new Date(System.currentTimeMillis() + 1000))
//每隔一秒执行,并且一直重复
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())
.build();
scheduler.scheduleJob(jobDetail, trigger);

try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//删除job
// this.shutDown(scheduler, jobKey);
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public void testCrontab(){
//通过schedule工厂类获得一个Schedule类
Scheduler scheduler = null;
try {
scheduler = StdSchedulerFactory.getDefaultScheduler();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//初始化一个JobDetail
JobKey jobKey = new JobKey("test_2","test");
JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity(jobKey).build();
//初始化一个Crontab触发器,设置触发器名称和触发器所属的组名及优先级
CronTriggerImpl cronTrigger = new CronTriggerImpl();
try {
cronTrigger.setCronExpression("0/5 * * * * ?");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cronTrigger.setName("testCronTrigger");
cronTrigger.setGroup("cronTrigger");
cronTrigger.setPriority(8);
//交给调度器调度运行JobDetail和Trigger
try {
scheduler.scheduleJob(jobDetail, cronTrigger);
//启动调度器
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// this.shutDown(scheduler, jobKey);
}

/**
* 定义删除job的方法
* @param scheduler
* @param jobKey
*/
public void shutDown(Scheduler scheduler, JobKey jobKey){
try {
scheduler.deleteJob(jobKey);
scheduler.shutdown();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args) {
new TestQuartz().testSimple();
new TestQuartz().testCrontab();
}

}四、测试结果



       至此,一个简单的任务调度就实现了,大家可以自己编辑自己的业务逻辑进行进一步的测试~

      你们在此过程中还遇到了什么问题,欢迎留言,让我看看你们都遇到了哪些问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Quartz 任务调度