Quartz--01
Quartz
调度器(scheduler):定时定频率的去执行任务
任务(job):业务逻辑
触发器(trigger):让任务生效的时间
JobDetail(包含任务实现类,任务信息)
trigger(触发器)
SimpleTrigger()
CronTrigger(实现复杂的业务逻辑 常用)
scheduler
重要组成
Job
JobDetail(通过反射机制实现job)
JobBuilder
JobStore
Trigger(类)
TriggerBuilder
ThreadPool
Scheduler
Calendar
监听器
JobListener TriggerListener SchedulerListener
Quartz使用写自己的job类实现job接口
在execute方法中编写业务逻辑
自定义类
定义jobDetail trigger 对象
Demo
myjob
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 { @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + sf.format(date));
// 编写具体的业务逻辑
System.out.println("Hello World!");
} }
package cn.miye.web; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.JobBuilder;
import org.quartz.JobDetail;
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 {
// 创建一个JobDetail实例,将该实例与HelloJobClass绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.usingJobData("message","hello myJob1")
.usingJobData("FloatJobValue",3.14F)
.build();
// 创建一个Trigger实例,定义该job立即执行,并每隔两秒钟执行一次,直到程序停止
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("mytrigger", "group1")
.usingJobData("message","hello myTrigger1")
.usingJobData("DoubleTriggerValue",2.0D)
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2).repeatForever()).build();
// 创建Scheduler实例
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();
scheduler.start();
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + sf.format(date));
scheduler.scheduleJob(jobDetail, trigger);
}
}
job实例在Quartz中额生命周期
每次调度器执行job时,它在调用execute方法前会创建一个新的job实例
当调用完成后,关联的job对象实例会被释放,释放的实例会被垃圾回收机制回收
jobDetai
JobDetail为job实例提供了许多设置属性,以及jobDataMap成员变量属性,它用来存储特定job实例的状态信息,调度器需要借助jobDetail对象来添加job实例
jobdetail用来绑定job,携带job的一些信息
job的一些属性 name group jobClass jobDataMap
组默认不写是DEFAULT
取出jibDetail的属性
jobDetail.getKey().getName();
jobDetail.getKey().getGroup();
JobExectionContext
当Scheduler调用一个job,就会将jobExecutionContext传递给job的execute()方法
job能通过jobExecutionContext对象访问到Quartz运行时候的环境及job本身的明细数据
JobDataMap
在进行任务调度时JobDataMap存储在JobExecutionContext中,非常方便获取
JobDataMap可以用来装载任何可序列化的数据对象
当job实例对象被执行时这些参数对象会传递给它
JobDataMap实现JDK的Map接口,并且添加了一些非常方便的方法用来存取基本数据类型
(键值对形式存取)
获取JobDataMap的两种方式
从Map中直接获取
map中直接获取
package cn.miye.web; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey; public class HelloJob implements Job { @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + sf.format(date));
// 编写具体的业务逻辑
System.out.println("Hello World!"); //获取jobDetail的名称和分组
JobKey key = context.getJobDetail().getKey();
System.out.println(key.getName()+":"+key.getGroup()); //获取trigger的名称和分组
TriggerKey trkey = context.getTrigger().getKey();
System.out.println(trkey.getName()+":"+trkey.getGroup()); //获取自定义传入的自定义参数的值 JobDataMap dataMap = context.getJobDetail().getJobDataMap();
JobDataMap tdataMap = context.getTrigger().getJobDataMap();
String jobMsg = dataMap.getString("message");
float jobFloatValue = dataMap.getFloat("FloatJobValue");
String triggerMsg = tdataMap.getString("message");
Double triggerDoubleValue = tdataMap.getDouble("DoubleTriggerValue");
System.out.println(jobMsg+"--"+jobFloatValue);
System.out.println(triggerMsg+"--"+triggerDoubleValue); //获取jobDetail和trigger合并的key
//如果jobDetail和trigger的key值相同,那么trigger会覆盖jobDetail
JobDataMap mergedJobDataMap = context.getMergedJobDataMap();
String msg = mergedJobDataMap.getString("message");
Float mergetJobFloatValue = mergedJobDataMap.getFloat("FloatJobValue");
Double mergeTriggerDoubleValue = mergedJobDataMap.getDouble("DoubleTriggerValue");
System.out.println(msg);
System.out.println(mergetJobFloatValue);
System.out.println(mergeTriggerDoubleValue);
} }
job实现类中添加setter方法对应JobDataMap的键值
(Quartz框架默认的JobFactory实现类在初始化job实例对象时会自动的调用这些setter方法)
通过setter方法获取(定义的成员变量名称应与传入的key的名称相同)
package cn.miye.web; import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey; public class HelloJob implements Job {
private String message;
private Float FloatJobValue;
private Double DoubleTriggerValue; public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public Float getFloatJobValue() {
return FloatJobValue;
} public void setFloatJobValue(Float floatJobValue) {
FloatJobValue = floatJobValue;
} public Double getDoubleTriggerValue() {
return DoubleTriggerValue;
} public void setDoubleTriggerValue(Double doubleTriggerValue) {
DoubleTriggerValue = doubleTriggerValue;
} @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 打印当前时间
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Current Exec Time Is:" + sf.format(date));
System.out.println(message);
System.out.println(FloatJobValue);
System.out.println(DoubleTriggerValue);
} }
传递自定义参数
.usingJobData("key1","value1").usingJobData("key2",value2)
Quartz--01的更多相关文章
- Quartz.net 2.x 学习笔记01
Quartz.net 2.0 2012年4月9日发布了Released版本,到目前(2014-12-08)为止是2.3版 Quartz.net 项目地址:http://www.quartz-sched ...
- Quartz.NET教程:(01) 使用Quartz
使用调度器 (scheduler) 之前要先用 ISchedulerFactory 的一个实现来实例化调度器(scheduler).一旦调度器实例化完成,则它可以被启动.置于备用模式或者关闭.需要注意 ...
- Quartz.Net 学习之路01 安装Quartz.Net
Quartz.Net 系列文章的第一篇,至于Quartz.Net 是做什么的我就不介绍了,相信要用到它的都知道它是用来干嘛的: Quartz.Net安装方法: 1.打开项目,在VS“工具”菜单选中“库 ...
- Quartz.NET常用方法 01
Quartz.NET作为一款定时框架,它的最小可运行程序如下: var scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- Quartz.Net简单使用
Quartz.Net为开源的作业调度框架,使用方便,实现IJob接口,及相关配置,即可实现调度. 项目包安装: install-package Quartz install-package log4n ...
- 初识Quartz(入门案例)+常用的Cron表达式
1.Quartz架构图 1.实体层 package cn.happy.entity; //1. public class Plan { //时间 private String date; //任务 p ...
- Quartz 入门详解
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...
- 任务调度开源框架Quartz动态添加、修改和删除定时任务
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz框架包含了调度器监听.作业和触发器监听.你可以配置作业和触发器监听为全局监听或者是特定于 ...
- 【JAVA】Quartz中时间表达式的设置
Quartz中时间表达式的设置-----corn表达式 时间格式: <!-- s m h d m w(?) y(?) -->, 分别对应: 秒>分>小时>日>月 ...
随机推荐
- git上拉取tag,识别最新tag在此版本上新增tag
通过shell 脚本自动获取最新tag,并输入最新版本后,推到git上 # 拉取分支上现有的tags git fetch --tags echo -e "所有tag列表" git ...
- [BZOJ1381]Knights
Description 在一个N*N的棋盘上,有些小方格不能放骑士,棋盘上有若干骑士,任一个骑士不在其它骑士的攻击范围内,请输出最多可以放多少个骑士. 骑士攻击的点如中国象棋中的马,可以攻击8个点. ...
- Chtholly Tree (珂朵莉树) ODT
ODT,OldDriverTree,又名ChthollyTree" role="presentation" style="position: relative; ...
- 构造 HDOJ 5399 Too Simple
题目传送门 题意:首先我是懂了的,然后我觉得很难讲清楚就懒得写了,关键理解f1(f2(fm(i)))=i,不懂的戳这里构造:如果fi(j)不是映射到(1~n),重复或者不在范围内的肯定无解.还有没有- ...
- JS 对输入判断变化屏蔽中文输入法连续输入时触发的事件
//智能搜索提示 IntelligenceSearch: function IntelligenceSearch() { $('#keyWord').on('input', function () { ...
- 1475 建设国家 DP
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1475 这题转化过来就是,给定n个点,每个点都有一个过期时间,一个价值.现 ...
- iOS Programming Controlling Animations 动画
iOS Programming Controlling Animations 动画 The word "animation" is derived from a Latin wor ...
- spring-mvc hello world (1)
我学习一个程序,都是从DEMO开始的. 先不了解SPRING-MVC的原理,但一些小的概念还是需要了解的.由于之前有过SSH的工程经验,故基本的东东,不在叙述. 1.准备环境 JAR包:
- C/C++ new/delete []、内存泄漏、动态数组
一.概念 new/delete是用于动态分配和撤销内存的运算符.new/delete是c++里才有的,c中是用malloc和free,c++虽然也可以用,但是不建议用.当我们使用关键字new在堆上动态 ...
- chat - 和数据集沟通的指令稿
总览 SYNOPSIS chat [ options ] script 描述 DESCRIPTION chat 程式在電腦與數據機之間定義溝通交換事宜. 它最主要的目的是用來在點對點協定的隱形程式 ( ...