第四节: Quartz调度器
来源:互联网 发布:mac上word文档消失了 编辑:程序博客网 时间:2024/05/21 10:16
前面几节简单的介绍了Quartz和其内部的执行过程,内容简单也容易理解,今天正式步入Quartz源码研究刨习,从调度器入手吧!
打开代码,先看下代码整体结构:
调度器介绍:
Quartz调度器(Scheduler)主要有两个,一个是远程调度器(RemoteScheduler),一个是标准调度器(StdScheduler),它们是由调度工厂完成实例化的,对用户是封闭的。由工厂实例化哪个调度器取决于用户自己的配置。
我们看一下调度工厂的类图:
通过类图我们注意到两个调度器其实是对用户不可见的,而且是方便以后扩展的。另外DirectSchedulerFactory工厂是个单例,大家用quartz的时候一般会用过StdSchedulerFactory而很少会用到DirectSchedulerFactory,是因为DirectSchedulerFactory不允许配置,需要用户在代码里配置所有的属性,不太灵活。但对于阅读代码来说,我还是喜欢从DirectSchedulerFactory开始。
DirectSchedulerFactory工厂:
DirectSchedulerFactory 相对简单一点,它内部除了实现接口的方法就还有几个调来调去的重载方法:
下面我们就用如上图第8个重载函数,来进行实例化调度器,并完成一次作业:
如下代码:
1.job还是用第一节中的MyJob
2.调度代码:
static void Main(string[] args){ //调度器名称 conststring SchedulerName = "MySimpScheduler"; //调度器唯一Id stringSchedulerId = Guid.NewGuid().ToString(); //实例化简单线程池 IThreadPoolsimpleThreadPool = new SimpleThreadPool(5,ThreadPriority.Normal); //实例化RAMJobStore IJobStorejobStore = new RAMJobStore(); //线程执行器 IThreadExecutorthreadExecutor = new DefaultThreadExecutor(); //调度器 DirectSchedulerFactorysf = DirectSchedulerFactory.Instance; sf.CreateScheduler(SchedulerName,SchedulerId, simpleThreadPool, threadExecutor, jobStore, null, TimeSpan.Zero,TimeSpan.Zero, 1, TimeSpan.Zero); ISchedulersched = sf.GetScheduler(SchedulerName); //job详情,注意MyJob IJobDetailmyJob = JobBuilder.Create<MyJob>() .WithIdentity("job1", "group1") .Build(); //触发器 ITriggertrigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("/5 * * * * ? ") .Build(); //关联job和触发器 sched.ScheduleJob(myJob, trigger); //执行 sched.Start(); Console.Read(); //关掉 sched.Shutdown(true);}
3.执行结果:
总结:通过以上代码,我们可以看到执行结果和前几节是一样的,只不过我们显示的将配置写到代码中,从代码内容可以看出,调度器工厂在进行实例化调度器的时候都干什了些什么事情。比如有实例化线程池,实例化job存储器,实例化插件,等其它的东东。
代码:
class MyClass3 { static void Main(string[] args) { //调度器名称 const string SchedulerName = "MySimpScheduler"; //调度器唯一Id string SchedulerId = Guid.NewGuid().ToString(); //实例化简单线程池 IThreadPool simpleThreadPool = new SimpleThreadPool(5, ThreadPriority.Normal); //实例化RAMJobStore IJobStore jobStore = new RAMJobStore(); //线程执行器 IThreadExecutor threadExecutor = new DefaultThreadExecutor(); //调度器 DirectSchedulerFactory sf = DirectSchedulerFactory.Instance; sf.CreateScheduler(SchedulerName, SchedulerId, simpleThreadPool, threadExecutor, jobStore, null, TimeSpan.Zero, TimeSpan.Zero, 1, TimeSpan.Zero); IScheduler sched = sf.GetScheduler(SchedulerName); //job详情,注意MyJobch IJobDetail myJob = JobBuilder.Create<MyJob>() .WithIdentity("job1", "group1") .Build(); //触发器 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("/5 * * * * ? ")//每5秒执行一次 .Build(); //关联job和触发器 sched.ScheduleJob(myJob, trigger); //执行 sched.Start(); Console.Read(); //关掉 sched.Shutdown(true); } public class MyJob : IJob { public void Execute(IJobExecutionContext context) { Console.WriteLine("我执行了,时间:{0}", DateTime.Now); } } }
- 第四节: Quartz调度器
- 使用Quartz调度器
- 使用Quartz调度器
- Quartz任务调度器
- Quartz调度器
- 任务调度器Quartz
- quartz 调度器配置
- Quartz 作业调度器
- Quartz任务调度器
- quartz调度器架构
- Quartz定时调度器
- quartz调度器
- 关于quartz调度器
- quartz调度器表达式
- Quartz调度器
- Quartz任务调度器
- Quartz调度器的使用
- Quartz.NET--Schedule 调度器
- JQuery插件第三十三个:高级搜索下的排序功能
- debug使用日记
- TI DaVinci DM6467 基于 lighttpd 搭建嵌入式网页服务器
- 谁是你生命中的贵人
- uint 数据类型解释
- 第四节: Quartz调度器
- 我们常用的在a标签中有点击事件
- fscanf函数
- 一位女测试工程师的成长
- 继承学习1
- oracle表数据恢复2
- erp工程师的基本知识
- linux溢出提权(适合刚学习linux提权的朋友)
- mysql修改主键