Quartz---Java定时任务调度工具
来源:互联网 发布:高达00和高达seed知乎 编辑:程序博客网 时间:2024/06/01 09:49
- 一、三个核心概念
- 调度器(scheduler)
- 任务(job)
- 触发器(trigger)
- 二、主要用到的设计模式
- Builder模式(创建jobdetail,trigger)
- Factory模式(创建Scheduler)
- 组件模式
- 链式写法
- 三、重要组成
- Job
- JobDetail
- JobDetail
- JobStore
- Trigger:SimpleTrigger、CronTrigger
- TriggerBuilder:
- ThreadPool:共享线程池,解决并发问题
- Scheduler
- Calendar:一个Trigger可以和多个Calendar关联,以排除或包含某些时间点
- 监听器:JobListener,TriggerListner,SchedulerListener
- 四、一张图![Quartz体系结构](http://img.blog.csdn.net/20170815185405168?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSURvZzE0OXRhbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- 五、浅谈Job
- Job实例在Quartz中的生命周期
每次调度器执行job时,它在调用execute()方法前会创建1个新的job实例。
当调用完成后,关联的job对象实例会被释放,释放的实例会被垃圾回收机制回收。
- JobDetail重要属性:name,group,jobClass,jobDataMap
- JobExecutionContext:Job通过访问JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的明细数据
- JobDataMap:在进行任务调度时,JobDataMap存储在JobExecutionContext中,非常方便获取;JobDataMap可以用来装载任何可序列化的数据对象,当job实例对象被执行时会传递参数给这些对象;JobDataMap实现了JDK的map接口(key-value)。
用法1:在jobDetail或者Trigger里用“usingJobData()”添加键值对数据,在job里用jobDataMap中的getJobDataMap()或者getMergedJodDataMap()获取【若Trigger和JobDetail的key值一致,getMergedJodDataMap()会覆盖掉JobDetail中的值】。举例说明:
//添加数据 JobDetail jobDetail=JobBuilder.newJob(HelloJob.class) .withIdentity("myJob","group1") .usingJobData("message", "hello jobDetail1") .usingJobData("message", "hello jobDetail2") .build(); //获取数据 JobDataMap jobDataMap=context.getJobDetail().getJobDataMap(); String msg1=jobDataMap.getString("message");
用法2:直接在Job类中添加setter()方法对应JobDataMap的键值。
- 六、浅谈Trigger
- Trigger通用属性:Jobkey/StartTime/EndTime,StartTime和EndTime的值类型是java.util.Date.
- CronTrigger:基于日历的作业调度。
- Cron表达式:秒、分钟、小时、日、月、周、天。
此处应插2张图 ![Cron表达式特殊字符意义对应表]()
![通配符说明]()
- 七、浅谈Scheduler
使用Quartz实现任务:每2秒打印一次“Hello Job”
HelloJob.java
import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class HelloJob implements Job{ public void execute(JobExecutionContext arg0) throws JobExecutionException { // 编写具体的业务逻辑 Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Current Exec time is: "+sdf.format(date)); System.out.println("Hello Job!"); }}
HelloScheduler.java
import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.ScheduleBuilder;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SimpleScheduleBuilder;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;public class HelloScheduler { public static void main(String[] args) throws SchedulerException{ //使用builder模式创建1个JobDetail实例,将该实例与HelloJob.class绑定 JobDetail jobDetail=JobBuilder.newJob(HelloJob.class). withIdentity("myJob","group1").build(); //使用builder模式创建1个Trigger实例,定义该job立即执行,并且每隔2秒钟重复执行1次,直到永远 Trigger trigger=TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startNow().withSchedule( SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(2).repeatForever()) .build(); //创建Scheduler实例,使用factory模式创建 SchedulerFactory sfact=new StdSchedulerFactory(); Scheduler scheduler=sfact.getScheduler(); scheduler.start(); Date date=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Current time is: "+sdf.format(date)); scheduler.scheduleJob(jobDetail, trigger); }}
阅读全文
0 0
- Quartz---Java定时任务调度工具
- java定时任务调度工具-quartz
- Java定时任务调度工具详解之Quartz篇
- java定时任务调度工具Timer和Quartz
- java定时调度工具quartz
- 定时任务调度工具之Quartz(一)
- 定时任务调度工具Quartz【进阶】
- Java定时任务调度工具
- Quartz 定时任务调度
- quartz定时任务调度
- Quartz定时任务调度
- Java定时任务调度之Quartz
- Java Quartz 构建定时调度任务
- [译]Java定时任务调度-Quartz Cron 调度
- quartz定时任务调度学习
- quartz实现定时任务调度
- Spring+Quartz定时任务调度
- quartz的定时调度任务
- Maven仓库的迁移
- IntelliJ IDEA debug调试小结
- hdu6130 Kolakoski 2017多校第七场1011 打表
- 常用的jar包的作用概述
- Drools 规则引擎----向领域驱动进步(五)
- Quartz---Java定时任务调度工具
- RMQ
- Ajax介绍1
- 怎么从Chrome浏览器中导出扩展程序为crx文件?
- KCF算法学习笔记
- H5面试——如何阻止事件冒泡和默认事件
- ${pageContext.request.contextPath}访问相关的问题
- Evaluate Reverse Polish Notation问题及解法
- Builder模式设置AlertDialog字体大小、颜色等属性