Quartz的基本使用之入门(2.3.0版本)

一、Quartz可以用来做什么Quartz是一个强大任务调度框架,我工作时候会在这些情况下使用到quartz框架,当然还有很多的应用场景,在这里只列举2个实际用到的餐厅系统会在每周四晚上的22点自动审核并生成报表人事系统会在每天早晨8点给有待办的人员自动发送Email提醒二、使用Quartz之前的准备1.建立一个Maven项目2.引入quartz的依赖使用quartz,我们仅仅需要在maven的p...

Quartz的基本使用之入门(2.3.0版本)

一、Quartz可以用来做什么

Quartz是一个强大任务调度框架,我工作时候会在这些情况下使用到quartz框架,当然还有很多的应用场景,在这里只列举2个实际用到的

  • 餐厅系统会在每周四晚上的22点自动审核并生成报表
  • 人事系统会在每天早晨8点给有待办的人员自动发送Email提醒

二、使用Quartz之前的准备

1.建立一个Maven项目

2.引入quartz的依赖  

  使用quartz,我们仅仅需要在maven的pom文件中添加依赖即可。我使用的是现在最新的一个版本2.3.0,大家可以在maven的仓库获取到最新的版本依赖,地址:http://mvnrepository.com/artifact/org.quartz-scheduler/quartz

  但然也可以使用这个2.3.0的依赖,下面的例子都是使用此依赖并实现了效果。

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --><dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version></dependency>

三、编写第一个Quartz任务案例 - 每隔2秒钟打印一次HelloQuartz

先实现一下这个基本的Quartz的任务再来介绍一下Quartz的3个重要组成,JobDetail,Trigger,Scheduler

1.创建一个类 HelloJob.java,这个类是编写我们的具体要实现任务(打印Hello Quartz)

复制代码
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.text.SimpleDateFormat;
import java.util.Date;
public class HelloJob implements Job{  public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //打印当前的执行时间 例如 2017-11-23 00:00:00 Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("现在的时间是:" sf.format(date)); //具体的业务逻辑 System.out.println("Hello Quartz"); }}
复制代码

2.创建一个类HelloScheduler.java,这个是具体触发我们的任务

复制代码
public class HelloScheduler { public static void main(String[] args) throws SchedulerException {  //创建一个jobDetail的实例,将该实例与HelloJob Class绑定  JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob").build();  //创建一个Trigger触发器的实例,定义该job立即执行,并且每2秒执行一次,一直执行  SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();  //创建schedule实例  StdSchedulerFactory factory = new StdSchedulerFactory();  Scheduler scheduler = factory.getScheduler();  scheduler.start();  scheduler.scheduleJob(jobDetail,trigger); }}
复制代码

3.执行main方法,Run 'HelloScheduler.main()',可以看见如下效果,表明任务执行成功了

4.一句话看懂quartz

1、创建调度工厂();   //工厂模式

2、根据工厂取得调度器实例();   //工厂模式
3、Builder模式构建子组件<Job,Trigger>   //builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
4、通过调度器组装子组件 调度器.组装<子组件1,子组件2...>   //工厂模式
5、调度器.start();  //工厂模式

四、第二个案例 - 每日的9点40分触发任务打印HelloQuartz

 与上一个的简单案例的区别在于,SimpleTrigger/CronTrigger. 简单的定时任务,可以采用SimpleTrigger,复杂的任务一般采用CronTrigger.cronTrigger不仅可以设定单的触发时间表,更可以设定非常复杂的触发时间表。 CronTrigger 是基于 Unix类似于 cron 表达式,如果对cron表达式比较熟悉,那么学习起来经非常简单. 即使对cron表达式不熟悉,花一会儿的功夫也可以学会。(在工作中我们直接使用网上的在线生成表达式即可又快又准确)生成地址:http://cron.qqe2.com/

先上代码,然后介绍一下cron表达式生成规则。

1.编写任务类 HelloJob.java,具体情况编写具体内容,如生成报表,发送邮件。。

复制代码
public class HelloJob implements Job{ public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {  //打印当前的执行时间 例如 2017-11-22 00:00:00  Date date = new Date();  SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  System.out.println("现在的时间是:"  sf.format(date));  //具体的业务逻辑  System.out.println("开始生成任务报表 或 开始发送邮件"); }}
复制代码

2.编写任务触发类 CronScheduler.java

复制代码
public class CronScheduler {  public static void main(String[] args) throws SchedulerException, InterruptedException {  //jobDetail  JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("cronJob").build();  //cronTrigger  //每日的9点40触发任务  CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("cronTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 40 9 * * ? ")).build();  //1.每日10点15分触发0 15 10 ?* *  //2.每天下午的2点到2点59分(正点开始,隔5分触发) 0 0/5 14 * * ?  //3.从周一到周五每天的上午10点15触发0 15 10 ? MON-FRI  //4.每月的第三周的星期五上午10点15触发  0 15 10 ? * 6#3  //5.2016到2017年每月最后一周的星期五的10点15分触发0 15 10 ? * 6L 2016-2017  //Scheduler实例  StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();  Scheduler scheduler = stdSchedulerFactory.getScheduler();  scheduler.start();  scheduler.scheduleJob(jobDetail,cronTrigger); }}
源文地址:https://www.guoxiongfei.cn/cntech/9849.html