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();
}
}四、测试结果
至此,一个简单的任务调度就实现了,大家可以自己编辑自己的业务逻辑进行进一步的测试~
你们在此过程中还遇到了什么问题,欢迎留言,让我看看你们都遇到了哪些问题。
一、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();
}
}四、测试结果
至此,一个简单的任务调度就实现了,大家可以自己编辑自己的业务逻辑进行进一步的测试~
你们在此过程中还遇到了什么问题,欢迎留言,让我看看你们都遇到了哪些问题。
相关文章推荐
- Spring实现后台的任务调度TimerTask和Quartz
- Spring与Quartz集成配置实现简单定时任务调度
- quartz结合spring轻松实现任务调度
- springboot+Quartz实现任务调度的示例代码
- springmvc中实现quartz定时任务(每分钟的第3秒执行任务调度方法)
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- 使用Quartz2.1.6+Spring3.0实现任务调度简单示例
- Spring与Quartz的整合实现定时任务调度
- 使用Spring + quartz实现定时任务调度
- Spring整合的quartz任务调度的实现方式
- Quartz中扩展MethodInvokingJobDetailFactoryBean实现对任务调度的拦截
- 项目ITP(六) spring4.0 整合 Quartz 实现动态任务调度
- Spring与Quartz的整合实现定时任务调度 以及crontab的用法
- springmvc中实现quartz定时任务(每分钟的第3秒执行任务调度方法)
- Spring与Quartz的整合实现定时任务调度
- ASP.NET MVC5 实现基于Quartz.NET任务调度
- 使用Quartz2.1.6+Spring3.0实现任务调度简单示例
- ** Spring实现Quartz任务调度的示例讲解
- spring3整合quartz实现任务调度功能
- Spring与Quartz的整合实现定时任务调度