Quartz2 定时器 《一》(概述)

为什么80%的码农都做不了架构师?>>>   hot3.png

Quartz2 
     说白了,就是个功能比较完善的定时器,可以通过指定的时间执行指定的任务。

 

应用范围

    a.比如让商城的活动(对象)在指定的时间(定时)从发布变为激活

    b.比如平台每天2:00去给用户发送通知。

    c.本来指定商城每天2:00发通知,但是碰到了星期天(触发器)改为1:00发通知

    定时器的应用范围其实很广,上面只是简单举了几个例子。

 

准备

    资源下载地址:http://www.quartz-scheduler.org/

    <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>

    如上在pom.xml加入要引入的jar包

 

Quartz中的设计模式

  1. Builder模式

    1. 所有关键组件都有Builder模式来构建  <Builder> 如:JobBuilder、TriggerBuilder

  2. Factory模式

    1. 最终由Scheduler的来进行组合各种组件  <Factory> 如SchedulerFactory

  3. Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的Job、Trigger等组件

  4. 链式写法,Quartz中大量使用链式写法,与jQuery的写法有几分相似,实现也比较简单,如:

    1.  $(this).addClass("divCurrColor").next(".divContent").css("display","block");  

    2. newTrigger().withIdentity( "trigger3""group1").startAt( startTime)

              .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();

 

框架核心分析

 

  1. SchedulerFactory    -- 调度程序工厂

    1. ThreadExecutor / DefaultThreadExecutor   -- 内部线程操作对象

    2. StdSchedulerFactory   -- Quartz默认的SchedulerFactory

    3. DirectSchedulerFactory  --   DirectSchedulerFactory是对SchedulerFactory的直接实现,通过它可以直接构建Scheduler、threadpool 

  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默认实现的简单线程池,它足够健壮,能够应对大部分常用场景

实现思想:

// 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();  //这里指定的HelloJob.class是job1的实现// 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);

 

一句话实现:

   1、创建调度工厂();    //工厂模式

   2、根据工厂取得调度器实例();  //工厂模式

   3、Builder模式构建子组件<Job,Trigger>  // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder

   4、通过调度器组装子组件   调度器.组装<子组件1,子组件2...>  //工厂模式

   5、调度器.start(); //工厂模式

**************************************************************************************************

********来源:http://blog.csdn.net/chenweitang123/article/details/37777399**********

**************************************************************************************************

 

转载于:https://my.oschina.net/gxiao/blog/551168

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九、为影院添加影片《仿淘票票系统前后端完全制作(除支付外)》

一、数据获取 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节已展示了影院页&#xff0c;但是你点击影院页进入后将看不到任何数据&#xff0c;这是因为当前影院还未有添加的影片&#xff0c;本节之后将会从页面开始完成这个功能。 首先我们应…

大话领域驱动设计——基础设施层

概述基础设施层是整个系统的⽀持层&#xff0c;通过对第三⽅类库的调⽤或系统的抽象和集成来实现对其他层的⽀持。与传统架构不同在DDD中&#xff0c;数据库访问的具体实现&#xff08;仓储&#xff09;也被放在了基础设施层。在DDD的理念中&#xff0c;基础设施层是为领域和用…

【MATLAB统计分析与应用100例】案例004:matlab调用smoothts函数对金融时间序列数据进行平滑处理

时间序列数据进行平滑处理效果预览: Excel原数据部分预览: 1. 读取金融时间序列数据,绘制波形图 x = xlsread(examp03_02.xls); % 从文件examp03_02.xls中读取数据 price = x(:,4)

【MATLAB统计分析与应用100例】案例005:matlab调用medfilt1函数对加噪正弦波信号进行平滑处理

平滑效果预览: 文章目录 1. 产生加噪正弦波信号,绘制加噪波形图2. 调用medfilt1对加噪正弦波信号y进行中值滤波,并绘制波形图1. 产生加噪正弦波信号,绘制加噪波形图 t = linspace(0,2*pi,500); % 产生一个从0到2

十、为影院添加影片及座位安排《仿淘票票系统前后端完全制作(除支付外)》

一、选中添加功能完成 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 在上一节咱们已经完成了对应的准备工作&#xff0c;在这一节中&#xff0c;咱们只需要对其进行调用即可&#xff0c;调用前还需要处理这些数据&#xff1a; 首先选中时&#xff0…

遍历文件夹还原数据库SQL语句

/***** 遍历文件夹进行数据库还原 *******/---需要开启xp_cmdshell 如已经开启 可以略过 /***** Step 1 开启 xp_cmdshell Use Master GO EXEC master.dbo.sp_configure show advanced options, 1 RECONFIGURE WITH OVERRIDE GO EXEC master.dbo.sp_configure xp_cmdshell, 1…

聊聊 C# 和 C++ 中的 泛型模板 底层玩法

最近在看 C 的方法和类模板&#xff0c;我就在想 C# 中也是有这个概念的&#xff0c;不过叫法不一样&#xff0c;人家叫模板&#xff0c;我们叫泛型&#xff0c;哈哈&#xff0c;有点意思&#xff0c;这一篇我们来聊聊它们底层是怎么玩的&#xff1f;一&#xff1a;C 中的模板玩…

Java实现画八卦

八卦是由多个圆叠加而成&#xff0c;如果我们让每个圆都有自己的颜色&#xff0c;那么具体结构便一目了然&#xff0c;如下图所示&#xff1a; 显然只要令对应的圆颜色相同&#xff0c;就能达到我们预期的效果。 用Java就能轻松画出来&#xff1a; import java.awt.BasicStroke…

十一、为影院添加影片制作准备服务《仿淘票票系统前后端完全制作(除支付外)》

一、为影院添加影片的逻辑和思考 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 进入之后找到上一节中制作的页面&#xff0c;咱们设置点击编辑按钮后进入的页面为影院添加影片页&#xff1a; 接着咱们查看影院添加影片页&#xff1a; 在该页中&…

Linux 内核中断内幕【转】

转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/ 本文对中断系统进行了全面的分析与探讨&#xff0c;主要包括中断控制器、中断分类、中断亲和力、中断线程化与 SMP 中的中断迁徙等。首先对中断工作原理进行了简要分析&#xff0c;接着详细探讨了中断亲…

SQL Server表分区

SQL Server表分区 什么是表分区 一般情况下&#xff0c;我们建立数据库表时&#xff0c;表数据都存放在一个文件里。 但是如果是分区表的话&#xff0c;表数据就会按照你指定的规则分放到不同的文件里&#xff0c;把一个大的数据文件拆分为多个小文件&#xff0c;还可以把这…

apt 根据注解,编译时生成代码

apt&#xff1a; Retention后面的值&#xff0c;设置的为CLASS&#xff0c;说明就是编译时动态处理的。一般这类注解会在编译的时候&#xff0c;根据注解标识&#xff0c;动态生成一些类或者生成一些xml都可以&#xff0c;在运行时期&#xff0c;这类注解是没有的~~会依靠动态生…

Hello Playwright:(6)与元素交互

在上一节我们已经了解到如何定位到元素&#xff0c;那么接下来就可以与元素进行交互了。下面的例子都是以百度首页作为测试页面输入文本FillAsync方法用于模拟用户选中元素并输入文本&#xff0c;这会触发元素的 input 事件。该方法只适合<input>、<textarea>等可输…

十二、动态座位响应及用户订票《仿淘票票系统前后端完全制作(除支付外)》

一、动态座位设置及发布 首先打开在线编辑器进入我们的项目&#xff1a;https://editor.ivx.cn/ 上一节中已经完成了座位设置的准备&#xff0c;这一节咱们将完成座位设置及发布的功能。 咱们首先给有座位设置事件&#xff1a; 有座位的事件设置当点击后更改当前的内容为0即…

C# 查询大型数据集

LINQ 语法非常好&#xff0c;但其作用是什么&#xff1f;我们只要查看源数组&#xff0c;就可以看出需要的结果&#xff0c;为什么要查询这种一眼就能看出结果的数据源呢&#xff1f;有时查询的结果不那么明显&#xff0c;在下面的示例中&#xff0c;就创建了一个非常大的数字数…

一、博客首页搭建搭建《iVX低代码仿CSDN个人博客制作》

制作iVX 低代码项目需要进入在线IDE&#xff1a;https://editor.ivx.cn/ 一、头部导航栏思路参考 首先我们可以查看CSDN的博客首页&#xff0c;从中查看一下布局&#xff1a; 在以上首页中&#xff0c;我们可以得知其顶部为一个整行&#xff0c;这个行内容左侧为一个logo&am…

linux samba服务器

本文转自wanglm51051CTO博客&#xff0c;原文链接&#xff1a; http://blog.51cto.com/studyit2016/1890282&#xff0c;如需转载请自行联系原作者

modernizer的意义

modernizer是一个js文件&#xff0c;会检查当前的浏览器支持什么特性&#xff0c;就在Html标签上添加什么类&#xff0c;然后如果不支持添加no-xxx类&#xff0c;这样&#xff0c;就可以针对两种情况写两种css。 http://blog.chinaunix.net/uid-21633169-id-4286857.html转载于…

Rafy 框架 - 幽灵插件(假删除)

Rafy 框架又添新成员&#xff1a;幽灵插件。本文将解释该插件的场景、使用方法、原理。 场景 在开发各类数据库应用系统时&#xff0c;往往需要在删除数据时不是真正地删除数据&#xff0c;而只是把数据标识为‘已删除’状态。这些数据在业务逻辑上是已经完全删除、不可用的数据…

二、博客首页完成《iVX低代码仿CSDN个人博客制作》

制作iVX 低代码项目需要进入在线IDE&#xff1a;https://editor.ivx.cn/ 一、菜单思路参考及制作 在 CSDN 首页中的菜单部分为一串横排的内容&#xff0c;并且可以进行拖动&#xff1a; 首先咱们添加一个行&#xff0c;命名为菜单&#xff1a; 接着肯定是需要设置上下的内边…