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(?) -->, 分别对应: 秒>分>小时>日>月 ...
随机推荐
- Luogu P1122最大子树和 【水树形Dp】By cellur925
题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...
- 标准字符cp功能
#include<stdio.h> #include<fcntl.h> int main(int argc,char *argv[]) { FILE *src_fp,*des_ ...
- [Usaco2005]Part Acquisition
Description The cows have been sent on a mission through space to acquire a new milking machine for ...
- [Usaco2008 Feb]Eating Together麻烦的聚餐
Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的 ...
- jsp错误处理
jsp提供了很好的错误能力,除了在java代码中可以使用try语句,还可以指定一个特殊页面,当页面应用遇到未捕获的异常时,用户将看到一个精心设计的网页解释发生了什么,而不是一个用户无法理解的错误信息. ...
- Lena Sort 构造题,很多细节的模拟
https://www.hackerrank.com/contests/101hack46/challenges/lena-sort 把题目转换成一颗二叉树,也就是当前的节点是cur,然后大的,放右边 ...
- Neither BindingResult nor plain target object for bean name 'user' available as request attribute
这个异常是因为jsp页面写错了. 把<form:form></form:form>标签改成普通的标签即可. 应该是第一次访问的时候,user是空的.但springmvc不能是空 ...
- API系列一:REST和RESTful认识
序言 最近工作的项目一直使用API,就想趁這个机会,把API的知识点进行一次梳理和总结,顺便提升一下自己对API全新的认识 Web API 是ASP.NET平台新加的一个特性,它可以简单快速地创建We ...
- $.extend(x,y); 函数用法介绍。
第一篇资料: 转自: https://www.cnblogs.com/yuqingfamily/p/5813650.html 语法:jQuery.extend( [deep ], target, o ...
- UI动画效果
UI界面的动画效果总结 方式1:头尾式 //开始动画 [UIView beginAnimations:nil context:nil]; //设置动画时间 [UIView setAnimationDu ...