
Quartz是一款由java写成的作业调度框架,在大量javase/javaee应用中被用来做定时任务,它功能强大而又不失使用简单性。
Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。
1、Job
表示一个工作,要执行的具体内容。此接口中只有一个方法
void execute(JobExecutionContext context)
线程运行Job时会把JobDataMap封装到JobExecutionContext里作为execute方法的参数,jobdetail是对job的封装,里面有Job的class,对应的数据, 名称,分组等
2、JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
3、Trigger代表一个调度参数的配置,job下次什么时候执行存放在trigger中。
4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
5、QuartzSchedulerResources相当于调度的资源存放器,包含了JobStore, ThreadPool等资源,调度都是通过QuartzSchedulerResources获取相关属性的。
6、jobStore是任务和触发器存储地方,它里面提供大量类似于增删改的 *** 作任务方法。
5、QuartzSchedulerThread是一个调度线程,ThreadPool是一个执行线程池,下图是运行后的线程栈:
Quartz是通过对用户暴露出Scheduler来进行任务的 *** 作,它可以把任务JobDetail和触发器Trigger加入任务池中,可以把任务删除,也可以把任务停止,scheduler把这些任务和触发器放到一个JobStore中,这里jobStore有内存形式的也有持久化形式的,当然也可以自定义扩展成独立的服务。
它内部会通过一个调度线程QuartzSchedulerThread不断到JobStore中找出下次需要执行的任务,并把这些任务封装放到一个线程池ThreadPool中运行,它的组件结构如下图:
各类的调用关系如下图:
下面看看quartz的简单实现:
首先是一个调度管理类:
接下来实现job接口:
测试主函数如下:
运行结果如下:
一、Objective-C
C语言是iOS开发的语言基础,而Objective-C是iOS开发的标准语言,也是为众多iphone开发工程师所公认的标准,所以必须要掌握。内容包括以下这些:
(1)Objective-C语言基础;
(2)library,framework的制作;
(3)Runtime编程;
(4)LLVM原理和调优。
二、 *** 作系统
*** 作系统使计算机系统所有资源最大限度地发挥作用,提供各种形式的用户界面,使用户有一个好的工作环境,为其它软件的开发提供必要的服务和相应的接口。所以,必须对ISO *** 作系统很熟悉才行。包括以下方面的内容:
(1)iOS内存管理和调优;
(2)iOS的文件系统和沙盒机制;
(3)iOS多线程编程(Thread,GCD,NSOperation);
(4)iOS网络和服务器编程(NSURLConnection,NSURLSession);
(5)iOS系统的各种安全机制。
三、网络编程
网络编程是学习iOS开发必须掌握的编程技巧,涉及到Htpps、Socket编程等;在这一部分处理的规范程度,直接影响到苹果AppStore的审核。
(1)iOS网络发送机制调整和优化(NSURLSession);
(2)Socket编程;
(3)网络传输中的各种保障;
(4)对传输协议的调整优化。
四、数据库&持久化方案
数据库持久化就是把数据保存到可永久保存的存储设备中,持久化的主要应用是将内存中的数据存储在关系型的数据库中。
(1)常规持久化方案(Keychain,NSUserDefaults,Sqlite,CoreData);
(2)数据库的使用和设计(Sqlite);
(3)数据结构优化,Sql调优。
五、图形图像编程
iOS开发过程中,大部分的APP都是采用多视图设计来完成的。所以要熟悉一些图像的绘制:
(1)UIKit,CoreAnimation和CoreText的绘制;
(2)CoreGraphics,Quartz2D,MediaPlayer,AVFoundation;
(3)OpenGLES,GLKit,SpriteKit,SceneKit,Metal。
六、数据结构&算法
懂得基本的算法:
(1)基本的算法和数据结构(排序搜索算法,数组,队列);
(2)较复杂数据结构的灵活应用(二叉树,图等);
(3)复杂的专项算法(图像识别算法,拓扑定位等)。
七、业务能力
作为一名优秀或者说是及格的iOS程序员,必须要有一定的将功能需求转化并实现的业务能力:
(1)一般性业务功能需求分析及实现;
(2)重要业务模块的需求分析及实现;
(3)中小规模产品的架构,系统设计和实现;
(4)大规模产品或产品线的架构,系统设计和实现;
(5)平台级产品的架构,系统设计和实现。
八、安全方案
另外,还需要提供对数据安全方面有利的方案:
(1)本地数据存储安全(Keychain);
(2)授权和身份验证;
(3)传输安全(对称,非对称,SSL);
(4)App代码安全。
九、专业素质
作为一名iOS工程师,需要具备一定专业素质,包括:
(1)团队协作能力。软件开发要求开发参与者间有一定默契度,从事自己工作之余为其他同伴创造条件;
(2)沟通能力。能清晰的把你对项目的理解、开发中的问题等转达给同事和用户;
(3)强烈的好奇心和学习精神。IOS软件开发的变化和创新几乎是每时每刻的,优秀的程序员要适应和主动迎合行业变化的大环境;
(4)冷静、细心。及时发现问题和判断对策。
用quartz实现多任务动态加载
Hudson报表系统二期结束了,这次新增了邮件定制功能,实现此功能的核心在于quartz框架。
Quartz是什么
Quartz是一个用Java编写的任务调度框架,任务调度是什么,举例说明:比如我们需要在每个星期四下午三点时候发周报,我们需要一个系统在两点半的 时候给我们一个发周报的提醒,这个提醒就是一次任务,每周星期四下午两点半的时候自动触发这个任务,这就可以理解为这个系统的一次任务调度。Quartz 提供给我们定时调度已定义好的任务的能力,如果你了解quartz的调度计划cronExpression表达式的配置,你会感叹quartz的灵活与强 大。
Quartz的应用广泛,对于Hudson报表系统,恰好为邮件定制功能提供强有力的支持。
Quartz的简单使用
在Hudson报表系统的一期中也用到了quartz,不过当时是把任务调度信息写死在配置文件中,每次系统启动后,调度的配置都加载在内存中,没有实现 多任务的动态加载。我们先以此来说明quartz的基本用法。Hudson报表系统是用spring框架将quartz整合起来的,故只介绍spring 和quartz的整合使用。
下图为spring配置文件中quartz的配置:
其实quartz的使用主要有三个部分,一个调度器Scheduler,一个要被调度的任务JobDetail,一个触发器Trigger,对上面的配置做一说明,在图中从下到上:
1、 配置一个job,这个job就是我们要调度的任务类,
2、 配置jobDetail,jobDetail需要加载job实现类,并且指定目标方法即完成任务需要执行的方法为execute,在这个方法里面定义我们要做的任务,execute方法需要我们在job类中实现。
3、 配置trigger,用于触发我们定义的任务,在触发器的配置中,我们需要加载需要调度的任务jobDetail,当然还要配置好我们需要触发的时间,触 发的时间配置在cronExperssion表达式中,这个表达式非常灵活与强大,举个例子:我们需要每个工作日早八点到晚八点之间,每半个小时触发一次 任务,我们可以将表达式配置为:0 0/30 8-20 MON-FRI。这个表达式的详细解释可以登录Hudson报表系统(链接:>
以上就是关于quartz作业调度的应用和原理全部的内容,包括:quartz作业调度的应用和原理、回答一个合格的IOS开发工程师应具备哪些条件、Quartz怎么设置多任务等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)