Quartz体系结构

三个核心概念

  • 调度器
  • 任务
  • 触发器

重要组成

  • Job
  • JobBuilder
  • JobDetail
  • JobStore
  • Trigger
  • TriggerBuilder
  • ThreadPool
  • Scheduler

监听器

  • JobListener
  • TriggerListener
  • SchedulerListener

Quartz简单使用

HelloJob的定义

public class HelloJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello Quartz: " + DateFormatUtils.format(Calendar.getInstance(), "yyyy-MM-dd HH:mm:ss"));
}
}

定时调用HelloJob

JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("name1", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("name1", "group1").startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build(); Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
System.out.println("任务开始: " + DateFormatUtils.format(Calendar.getInstance(), "yyyy-MM-dd HH:mm:ss"));
scheduler.scheduleJob(jobDetail, trigger);

Job & JobDetail

  • Job实例在Quartz中的生命周期

每次调度器执行Job时,它在调用execute方法前会创建一个新的Job实例。

当调用完成后,关联的Job对象实例会被释放,释放的实例会被垃圾回收机制回收。

JobDetail

JobDetail为Job实例提供了许多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例

重要属性

  • name
  • group
  • jobClass
  • jobDataMap

JobDataMap

获取JobDataMap中内容的两种方式

  1. 从Map中直接获取
  2. 添加setter方法对应键值

触发器Trigger

通用属性

  • JobKey
  • StartTime
  • EndTime

SimpleTrigger

  • 重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量值
  • 重复执行间隔必须是0或长整数
  • 一旦被指定了endTime参数,那么会覆盖重复次数参数的效果

CronTrigger

Cron表达式

用于配置CronTrigger实例。

是由7个子表达式组成的字符串,描述了时间表的详细信息。

格式:秒 分 时 日 月 周 年(可省略)

特殊字符意义

字段 是否必填 允许值 允许的特殊字符
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * / ? L W C
1-12或JAN-DEC , - * /
1-7或SUN-SAT , - * / ? L C #
空,1970-2099 , - * /
符号说明
字符 含义
* 所有
? 不确定值
- 区间
, 多个值,或的意思
/ 递增
L 最后
W 指定日期的最近那个工作日
# 序号,第几
  • LW可以一起使用
  • 周字段不区分大小写,MONmon相同
  • 利用工具生成表达式

在线Cron表达式生成器

Scheduler

  • 主要类:StdScheduler
  • 配置参数默认存储在quartz.properties中,在quartz的jar包下,org/quartz/quartz.properties
  • 主要函数
    • scheduleJob
    • start
    • standby(挂起)
    • shutdown(boolean参数,如果传入true,等待所有job完成后关闭,false或者无参数,立即关闭)

quartz.properties

  • 调度器属性
  • 线程池属性
  • 作业存储设置
  • 插件配置

Spring集成

两种方式

  • MethodInvokingJobDetailFactoryBean
  • JobDetailFactoryBean(更灵活)

参考

20181111 Quartz(慕课网)的更多相关文章

  1. 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用

    来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...

  2. 使用js脚本批量下载慕课网视频

    慕课网(http://www.imooc.com/)上有很多不错的视频,当然我不是来给慕课网打广告的,我本人学习过很多慕课网上的免费的视频. 在线看如果网速慢时,可能会有卡顿,没网时无法观看.所有说下 ...

  3. 手机端web学习基础--from慕课网

    web知识零零散散的知道一些,但总感觉不够系统,遇到问题不知道如何解决,因此特此来系统的学习一下web前端的知识.从慕课网的web基础看起.下面学习http://www.imooc.com/learn ...

  4. 安卓开发_慕课网_Fragment实现Tab(App主界面)

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  5. 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)

    学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...

  6. 安卓开发_慕课网_ViewPager实现Tab(App主界面)

    学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...

  7. 慕课网-安卓工程师初养成-4-9 Java循环语句之 for

    来源:http://www.imooc.com/code/1425 Java 的循环结构中除了 while 和 do...while 外,还有 for 循环,三种循环可以相互替换. 语法: 执行过程: ...

  8. 慕课网-安卓工程师初养成-4-8 Java循环语句之 do...while

    do...while 循环与 while 循环语法有些类似,但执行过程差别比较大. 语法:  执行过程: <1>. 先执行一遍循环操作,然后判断循环条件是否成立 <2>. 如果 ...

  9. 慕课网-安卓工程师初养成-4-7 Java循环语句之 while

    来源: http://www.imooc.com/code/1420 生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 ...

随机推荐

  1. scala学习——(1)scala基础(下)

    (七)定长数组 val array_name = new Array[T](length) val array_name = Array("","") 通过() ...

  2. ASP.NET多行文本框限制字符个数

    asp.net中TextBox当设置TextMode = Multiline时,其MaxLength属性无效.可使用JS进行辅助限制输入的字符个数.中文算两个字符,西文算1个字符. TextBox属性 ...

  3. [C#]使用Label标签控件模拟窗体标题的移动及窗体颜色不断变换

    本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.0及以 ...

  4. 按键精灵对APP自动化测试(下)

    上一篇介绍了安卓app上使用按键精灵的实践,这里再来说说苹果上的app. 由于iOS相关工具对操作系统的限制,目前在iOS10.0.2系统上应用成功. 二.       苹果手机按键精灵APP录制 适 ...

  5. 【读书笔记】Linux内核设计与实现(第一章&第二章)

    http://pan.baidu.com/s/1hqYAZNQ OneNote做的笔记没法儿带着格式一起导进来.所以上传到百度云,麻烦老师下载一下了. 下次不再用OneNote.

  6. LINUX内核分析第一周学习总结——计算机是如何工作的

    LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...

  7. 《Linux内核分析与设计》读书笔记二

    第五章 5.1 与内核通信57 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 首先它为用户空间提供了一种硬件的抽象接口,举例来说当需要读写文件的时候,应用程序就可以不去管 ...

  8. Alpha版阶段项目总结

    一,设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 针对铁道大学大学生,增加他们的社交范围.我们的软件定义很清楚.对典型用户和典型场景有清晰的描述 ...

  9. 微信小程序简易table组件实现

    前提:微信小程序自1.6.3基础库版本库开始支持简洁组件,之前的版本因不支持,故在引用组件处默认为空节点.关于微信小程序已有模板为何还需构建组件?一是因为组件可以更方便的自定义并绑定行为,二是在其他页 ...

  10. Web网络服务介绍

    Web网络服务也叫WWW(World Wide Web),一般是指能够让用户通过浏览器访问到互联网中文档资源服务.目前提供WEB网络服务的程序有Apache .Nginx 和  IIS  等等,Web ...