1. 什么是Quartz
      1. Quartz是一个开源的作业调度框架,由java编写,在.NET平台为Quartz.Net,通过Quart可以快速完成任务调度的工作.
    2. Quartz能干什么/应用场景
      1. 如网页游戏中挂机自动修炼如8个小时,人物相关数值进行成长,当使用某道具后,时间减少到4个小时,人物对应获得成长值.这其中就涉及到了Scheduler的操作,定时对人物进行更新属性操作,更改定时任务执行时间.
      2. 网页游戏中会大量涉及到Scheduler的操作,有兴趣的朋友可自行联想.
      3. 企业中如每天凌晨2点触发数据同步、发送Email等操作
    3. 同类框架对比
      1. TimeTask TimeTask在Quartz前还是显得过于简单、不完善,不能直接满足开发者的较为复杂的应用场景.
    4. 资源
      1. 官网:http://www.quartz-scheduler.org/
      2. 下载:http://www.quartz-scheduler.org/downloads
      3. maven pom
        1. <dependency>
              <groupId>org.quartz-scheduler</groupId>
              <artifactId>quartz</artifactId>
              <version>2.2.1</version>
          </dependency>
          <dependency>
              <groupId>org.quartz-scheduler</groupId>
              <artifactId>quartz-jobs</artifactId>
              <version>2.2.1</version>
          </dependency>
      4. 源代码 svn:http://svn.terracotta.org/svn/quartz
      5. 本文章采用的是2.21版本:CSDN下载:http://download.csdn.net/detail/chenweitang123/7636703
      6. 例子Demo:CSDN下载:整理完后上传.
    5. 框架分析
      1. 接口
      2. 类图
    6. Quartz中的设计模式
      1. Builder模式
        1. 所有关键组件都有Builder模式来构建  <Builder> 如:JobBuilder、TriggerBuilder
      2. Factory模式
        1. 最终由Scheduler的来进行组合各种组件  <Factory> 如SchedulerFactory
      3. Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的Job、Trigger等组件
      4. 链式写法,Quartz中大量使用链式写法,与jQuery的写法有几分相似,实现也比较简单,如:
        1. "trigger3", "group1").startAt( startTime)
                  .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();
    7. 框架核心分析
      1. SchedulerFactory    -- 调度程序工厂
        1. StdSchedulerFactory   -- Quartz默认的SchedulerFactory
        2. DirectSchedulerFactory  --   DirectSchedulerFactory是对SchedulerFactory的直接实现,通过它可以直接构建Scheduler、threadpool 等
          1. ThreadExecutor / DefaultThreadExecutor   -- 内部线程操作对象
      2. JobExecutionContext -- JOB上下文,保存着Trigger、 JobDeaitl 等信息,JOB的execute方法传递的参数就是对象的实例
        1. JobExecutionContextImpl
      3. Scheduler    -- 调度器
        1. StdScheduler    -- Quartz默认的Scheduler
        2. RemoteScheduler  -- 带有RMI功能的Scheduler
      4. JOB --任务对象
        1. JobDetail  -- 他是实现轮询的一个的回调类,可将参数封装成JobDataMap对象,Quartz将任务的作业状态保存在JobDetail中.
        2. JobDataMap --  JobDataMap用来报错由JobDetail传递过来的任务实例对象
      5. Trigger
        1. SimpleTrigger <普通的Trigger> --  SimpleScheduleBuilder
        2. CronTrigger  <带Cron Like 表达式的Trigger> -- CronScheduleBuilder
        3. CalendarIntervalTrigger <带日期触发的Trigger> -- CalendarIntervalScheduleBuilder
        4. DailyTimeIntervalTrigger <按天触发的Trigger> -- DailyTimeIntervalScheduleBuilder
      6. ThreadPool  --  为Quartz运行任务时提供了一些线程
        1. SimpleThreadPool  --一个Quartz默认实现的简单线程池,它足够健壮,能够应对大部分常用场景
      7. -----以上是Quartz涉及到的一些关键对象,详细的内容如有机会会在后续的文章中展开!
    8. Quartz类图

类图中主要分为5块:Factory、Bulider、Scheduler、Trigger、JOB

9.思想

     // 1、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory
// 开发者亦可自行实现自己的Factory;Job、Trigger等组件
SchedulerFactory sf = new StdSchedulerFactory(); // 2、通过SchedulerFactory构建Scheduler对象
Scheduler sched = sf.getScheduler(); // 3、org.quartz.DateBuilder.evenMinuteDate -- 通过DateBuilder构建Date
Date runTime = evenMinuteDate( new Date()); // 4、org.quartz.JobBuilder.newJob <下一分钟> --通过JobBuilder构建Job
JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build(); // 5、通过TriggerBuilder进行构建Trigger
Trigger trigger = newTrigger().withIdentity("trigger1","group1")
.startAt(runTime).build(); // 6、工厂模式,组装各个组件<JOB,Trigger>
sched.scheduleJob (job, trigger); // 7、start
sched.start(); try {
Thread.sleep(65L * 1000L);
} catch (Exception e) {
} // 8、通过Scheduler销毁内置的Trigger和Job
sched.shutdown(true);

一句话看懂Quartz

   1、创建调度工厂();    //工厂模式
   2、根据工厂取得调度器实例();  //工厂模式
   3、Builder模式构建子组件<Job,Trigger>  // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder
   4、通过调度器组装子组件   调度器.组装<子组件1,子组件2...>  //工厂模式
   5、调度器.start(); //工厂模式

Quartz深入浅出(一)的更多相关文章

  1. Quartz深入浅出(二)

    Hello Quartz / 本文通过一个简单的样例让大家高速了解Quartz,上手.并了解Quartz内的一些关键对象 如 Scheduler.Job.Trigger.JobExecutionCon ...

  2. Spring研磨分析、Quartz任务调度、Hibernate深入浅出系列文章笔记汇总

    Spring研磨分析.Quartz任务调度.Hibernate深入浅出系列文章笔记汇总 置顶2017年04月27日 10:46:45 阅读数:1213 这系列文章主要是对Spring.Quartz.H ...

  3. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  4. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  5. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  6. Quartz

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...

  7. Spring Quartz实现任务调度

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

  8. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  9. topshelf和quartz内部分享

    阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客. 介绍 topshelf是创建windows ...

随机推荐

  1. 2018.12.14 codeforces 932E. Team Work(组合数学)

    传送门 组合数学套路题. 要求ans=∑i=0nCni∗ik,n≤1e9,k≤5000ans=\sum_{i=0}^n C_n^i*i^k,n\le 1e9,k\le 5000ans=∑i=0n​Cn ...

  2. 2018.10.29 洛谷P4129 [SHOI2006]仙人掌(仙人掌+高精度)

    传送门 显然求出每一个环的大小. Ans=∏i(siz[i]+1)Ans=\prod_i(siz[i]+1)Ans=∏i​(siz[i]+1) 注意用高精度存答案. 代码: #include<b ...

  3. 第25章:MongoDB-文档存储[理解]

    ① 将文档插入到MongoDB的时候,文档是按照插入的顺序,依次在磁盘上相邻保存 因此,一个文档变大了,原来的位置要是放不下这个文档了,就需要把这个文档移动到集合的另外一个位置,通常是最后,能放下这个 ...

  4. DOM3级的变化

    由于存在跨浏览器开发问题所以不推荐使用: 兼容性: event.key 包含所按下键的字符 event.char 属性IE9和safari和chrome并不支持 event.location 返回所按 ...

  5. 学以致用二---配置Centos7.2 基本环境

    Centos 7 虚拟机安装好后,接下来该配置环境了. 一.查看系统版本 cat /etc/redhat-release 二.修改主机名 /etc/hostname 注意,hostname里的内容为l ...

  6. C++ —— 重载、覆盖和隐藏

    一.重载 发生在同一个类当中,当在同一类当中定义了方法A,然后又定义了方法B,B和A的方法名相同,但是参数不同,那么再是称B重载了方法A. class test{ public: void A(); ...

  7. 查看Redis集群主从对应关系工具

    工具的作用: 1)比"cluster nodes"更为直观的显示结果 2)指出落在同一个IP上的master 3)指出落在同一个IP上的master和slave对 运行效果图: 源 ...

  8. day32(表单校验js和jquery表单校验)

    校验用户名.密码.密码一直性. <style> .error { color: red } .success { color: green } </style> <scr ...

  9. Hbase_shell操作

    创建表 create 'user_action_table', 'action_log', 'action'-- 执行结果=> Hbase::Table - m_table 描述表信息 desc ...

  10. python 引入本地module

    我们经常会遇到调用组内其他成员开发的python脚本的情况, 这时,需要借助如下代码: import sys sys.path.append('/./..') #/./.. 是需要引入的module的 ...