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:00Date 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:00Date 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 {//jobDetailJobDetail 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);} }
quartz定时任务时间设置
每天凌晨2点 0 0 2 * * ?和每天隔一小时 0 * */1 * * ?
例1:每隔5秒执行一次:*/5 * * * * ?
例2:每隔5分执行一次:0 */5 * * * ?
在26分、29分、33分执行一次:0 26,29,33 * * * ?
例3:每天半夜12点30分执行一次:0 30 0 * * ? (注意日期域为0不是24)
每天凌晨1点执行一次:0 0 1 * * ?
每天上午10:15执行一次: 0 15 10 ? * * 或 0 15 10 * * ? 或 0 15 10 * * ? *
每天中午十二点执行一次:0 0 12 * * ?
每天14点到14:59分,每1分钟执行一次:0 * 14 * * ?
每天14点到14:05分,每1分钟执行一次:0 0-5 14 * * ?
每天14点到14:55分,每5分钟执行一次:0 0/5 14 * * ?
每天14点到14:55分,和18点到18点55分,每5分钟执行一次:0 0/5 14,18 * * ?
每天18点执行一次:0 0 18 * * ?
每天18点、22点执行一次:0 0 18,22 * * ?
每天7点到23点,每整点执行一次:0 0 7-23 * * ?
每个整点执行一次:0 0 0/1 * * ?
转载地址:
https://www.cnblogs.com/zhanghaoliang/p/7886110.html