最近在项目选型的时候,我们遇到了一个场景,由于我们是做传统教育行业的,然后教育行业的新生入学,评教等业务都牵涉到了一个定时任务的需求,刚开始有人提议说直接使用队列,但是后来经过衡量,决定使用quartz这个框架来实现这个定时任务的需求。
选它的原因:
这个技术已经比较的成熟,也有不少的可供参考的资料,后期好维护。
好了,废话不多说,直接进入咱们的正题,quartz这个框架可以说是为了定时任务量身打造的一个框架,这个框架的核心类主要是Job,Trigger,Scheduler这仨。
我直接上源码你就知道一个单纯的定时任务有多容易就实现了吧。
首先建立maven工程,引入jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tgb.quartz</groupId>
<artifactId>com.tgb.quartz</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
</project>
接着建立自己的job类,实现Job接口。把自己要实现的业务逻辑放入execute方法中,我这里就直接是打印一个helloworld了。
public class HelloJob implements Job {
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Date date= new Date();
SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println( simpleDateFormat.format(date));
//编写具体的业务逻辑
System.out.println("hello world");
}
}
最后在新建一个自己的任务调度类HelloScheduler
最后看执行效果:public class HelloScheduler { public static void main(String[] args) { //创建一个JobDetai实例,将该实例与HelloJob绑定 JobDetail jobDetail= JobBuilder.newJob(HelloJob.class) .withIdentity("myJob","groupOne") .build(); //创建一个Trigger触发器 Trigger trigger= TriggerBuilder.newTrigger() .withIdentity("myTrigger","groupOne") //触发器从此刻执行 .startNow() .withSchedule(SimpleScheduleBuilder .simpleSchedule() //执行间隔为2秒 .withIntervalInSeconds(2) //执行时间为永久 .repeatForever()).build(); //创建Scheduler任务调度实例 SchedulerFactory schedulerFactory= new StdSchedulerFactory(); try { Scheduler scheduler= schedulerFactory.getScheduler(); scheduler.start(); //将触发器和任务装配进任务调度容器中 scheduler.scheduleJob(jobDetail,trigger); Date date= new Date(); SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println( simpleDateFormat.format(date)); }catch (Exception e){ e.printStackTrace(); } } }
就这些,有木有很简单。这次只是简单的实现了一个小的定时任务的demo,一门技术往往不难,难的复杂的通常都
是业务,在现实场景中quartz框架往往都是和spring配合使用的,在下篇博客中会有展示,欢迎各位博友拍砖。