`
yimeng528
  • 浏览: 188885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

第四节: Quartz调度器

阅读更多

前面几节简单的介绍了Quartz和其内部的执行过程,内容简单也容易理解,今天正式步入Quartz源码研究刨习,从调度器入手吧!

 

打开代码,先看下代码整体结构:

  

调度器介绍:

Quartz调度器(Scheduler)主要有两个,一个是远程调度器(RemoteScheduler),一个是标准调度器(StdScheduler),它们是由调度工厂完成实例化的,对用户是封闭的。由工厂实例化哪个调度器取决于用户自己的配置。

我们看一下调度工厂的类图:

 

通过类图我们注意到两个调度器其实是对用户不可见的,而且是方便以后扩展的。另外DirectSchedulerFactory工厂是个单例,大家用quartz的时候一般会用过StdSchedulerFactory而很少会用到DirectSchedulerFactory,是因为DirectSchedulerFactory不允许配置,需要用户在代码里配置所有的属性,不太灵活。但对于阅读代码来说,我还是喜欢从DirectSchedulerFactory开始。

 

DirectSchedulerFactory工厂:

DirectSchedulerFactory 相对简单一点,它内部除了实现接口的方法就还有几个调来调去的重载方法:

 

下面我们就用如上图第8个重载函数,来进行实例化调度器,并完成一次作业:

如下代码:

1.job还是用第一节中的MyJob

2.调度代码:

[csharp] view plaincopy
  1. static void Main(string[] args)  
  2.   
  3. {  
  4.   
  5.             //调度器名称  
  6.             conststring SchedulerName = "MySimpScheduler";  
  7.   
  8.             //调度器唯一Id  
  9.             stringSchedulerId = Guid.NewGuid().ToString();  
  10.   
  11.             //实例化简单线程池  
  12.             IThreadPoolsimpleThreadPool = new SimpleThreadPool(5,ThreadPriority.Normal);  
  13.   
  14.             //实例化RAMJobStore  
  15.             IJobStorejobStore = new RAMJobStore();  
  16.   
  17.             //线程执行器  
  18.             IThreadExecutorthreadExecutor = new DefaultThreadExecutor();  
  19.   
  20.    
  21.   
  22.             //调度器  
  23.             DirectSchedulerFactorysf = DirectSchedulerFactory.Instance;  
  24.   
  25.             sf.CreateScheduler(SchedulerName,SchedulerId, simpleThreadPool, threadExecutor, jobStore, null,  
  26.   
  27.                                TimeSpan.Zero,TimeSpan.Zero, 1, TimeSpan.Zero);  
  28.   
  29.    
  30.   
  31.             ISchedulersched = sf.GetScheduler(SchedulerName);  
  32.   
  33.    
  34.   
  35.             //job详情,注意MyJob  
  36.             IJobDetailmyJob = JobBuilder.Create<MyJob>()  
  37.   
  38.                .WithIdentity("job1""group1")  
  39.   
  40.                .Build();  
  41.   
  42.    
  43.   
  44.             //触发器  
  45.             ITriggertrigger = TriggerBuilder.Create()  
  46.   
  47.                 .WithIdentity("trigger1""group1")  
  48.   
  49.                 .WithCronSchedule("/5 * * * * ? ")  
  50.   
  51.                 .Build();  
  52.   
  53.    
  54.   
  55.             //关联job和触发器  
  56.             sched.ScheduleJob(myJob, trigger);  
  57.   
  58.    
  59.   
  60.             //执行  
  61.             sched.Start();  
  62.   
  63.    
  64.   
  65.             Console.Read();  
  66.   
  67.    
  68.   
  69.             //关掉  
  70.             sched.Shutdown(true);  
  71.   
  72. }  


 

3.执行结果:

 

总结:通过以上代码,我们可以看到执行结果和前几节是一样的,只不过我们显示的将配置写到代码中,从代码内容可以看出,调度器工厂在进行实例化调度器的时候都干什了些什么事情。比如有实例化线程池,实例化job存储器,实例化插件,等其它的东东。

 

 

 

代码:

[csharp] view plaincopy
  1. class MyClass3  
  2.    {  
  3.        static void Main(string[] args)  
  4.        {  
  5.            //调度器名称  
  6.            const string SchedulerName = "MySimpScheduler";  
  7.            //调度器唯一Id  
  8.            string SchedulerId = Guid.NewGuid().ToString();  
  9.            //实例化简单线程池  
  10.            IThreadPool simpleThreadPool = new SimpleThreadPool(5, ThreadPriority.Normal);  
  11.            //实例化RAMJobStore  
  12.            IJobStore jobStore = new RAMJobStore();  
  13.            //线程执行器  
  14.            IThreadExecutor threadExecutor = new DefaultThreadExecutor();  
  15.   
  16.            //调度器  
  17.            DirectSchedulerFactory sf = DirectSchedulerFactory.Instance;  
  18.            sf.CreateScheduler(SchedulerName, SchedulerId, simpleThreadPool, threadExecutor, jobStore, null,  
  19.                               TimeSpan.Zero, TimeSpan.Zero, 1, TimeSpan.Zero);  
  20.   
  21.            IScheduler sched = sf.GetScheduler(SchedulerName);  
  22.   
  23.            //job详情,注意MyJobch  
  24.            IJobDetail myJob = JobBuilder.Create<MyJob>()  
  25.               .WithIdentity("job1""group1")  
  26.               .Build();  
  27.   
  28.            //触发器  
  29.            ITrigger trigger = TriggerBuilder.Create()  
  30.                .WithIdentity("trigger1""group1")  
  31.                .WithCronSchedule("/5 * * * * ? ")//每5秒执行一次  
  32.                .Build();  
  33.   
  34.            //关联job和触发器  
  35.            sched.ScheduleJob(myJob, trigger);  
  36.   
  37.            //执行  
  38.            sched.Start();  
  39.   
  40.            Console.Read();  
  41.   
  42.            //关掉  
  43.            sched.Shutdown(true);  
  44.        }  
  45.   
  46.        public class MyJob : IJob  
  47.        {  
  48.            public void Execute(IJobExecutionContext context)  
  49.            {  
  50.                Console.WriteLine("我执行了,时间:{0}", DateTime.Now);  
  51.            }  
  52.        }  
  53.    }  
分享到:
评论

相关推荐

    Spring中Quartz调度器的使用

    Spring 中 Quartz 调度器的使用 Spring 中 Quartz 调度器的使用是指在 Spring 框架中使用 Quartz 调度器来实现任务调度。Quartz 是一个功能强大且灵活的开源任务调度器,能够满足复杂的任务调度需求。在 Spring 中...

    Spring线程时间配置:Quartz和CronExpression

    Quartz是一个功能丰富的开源作业调度器,可以用于Java应用程序中的作业调度。它支持触发器、作业、日历等功能,并且能够根据复杂的Cron表达式来定义作业的执行时间。本文将详细介绍如何在Spring中配置Quartz以及...

    Quartz任务调度管理

    ### Quartz任务调度管理 #### 一、任务调度基础概念 任务调度是指系统按照预先设定的时间规则来自动执行特定任务的功能。这种机制广泛应用于各种场景,例如数据备份、定期检查资源状态、发送邮件通知等。 ##### ...

    Java框架介绍Quartz从入门到进阶.pdf

    3. 添加第三方库:Quartz框架需要少数的第三方库,例如Jakarta Commons库等,可以将这些库添加到工程中。 Quartz框架的使用步骤: 1. 创建Job接口实现类:创建一个实现org.quartz.Job接口的Java类,并添加一些逻辑...

    QuartzAPI中文chm

    4. **丰富的API**:Quartz提供了丰富的API,方便开发者创建、修改、删除任务和触发器,以及监控调度状态。 5. **插件扩展**:Quartz支持插件,可以扩展出更多功能,如邮件通知、日志记录等。 在"QuartzAPI.chm"文...

    Quartz调度框架

    ### Quartz调度框架详解 #### 一、Quartz让任务调度变得简单 Quartz是一个功能强大的开源作业调度框架,专门设计用于Java平台。它不仅适用于J2SE应用,也能很好地融入J2EE环境中。Quartz的强大之处在于其灵活性与...

    quartz作业调度demo

    3. **Scheduler(调度器)**:调度器是Quartz的核心,它负责管理和执行所有的作业和触发器。通过调用Scheduler的API,我们可以安排作业的执行、暂停、恢复或删除已有的调度。 在"quartz作业调度demo"中,你可能会...

    quartz的分布式调度大致分两种方式实现

    当Triggers的触发时间发生时,获取任务的第一个节点(通过在其上放置一个锁定)是将触发它的节点。 3.当其中一个节点在执行一个或多个作业期间失败时发生故障切换。当节点出现故障时,其他节点会检测到该状况并识别...

    Java Spring中Quartz调度器详解及实例

    Quartz调度器的核心特性在于其灵活性和可扩展性,使得开发者可以轻松地根据业务需求定义和安排任务。 一、Quartz的特点 1. **作业类的继承方式**: - **QuartzJobBean方式**:作业类继承`org.springframework....

    Spring中Quartz任务调度器cronexpression配置说明

    ### Spring中Quartz任务调度器cronexpression配置说明 在现代软件开发中,特别是Java应用程序领域,定时任务的执行是常见的需求之一。Spring框架通过集成Quartz这一强大的任务调度库,为开发者提供了灵活、高效的...

    Quartz Job Scheduling Framework第7章翻译初稿

    第7章的主题聚焦于实现Quartz监听器,这是一个关键特性,它使得开发者能够监控和响应Quartz调度器的事件。 在Quartz中,监听器提供了对作业执行、触发器状态改变和其他内部调度事件的观察能力。这有助于调试、日志...

    quartz-2.2.1

    Quartz 是一个开源的工作调度框架,常用于Java应用程序中,以执行定时任务。版本号"2.2.1"表明这是该库的一个特定发行版,可能包含了一些性能优化、错误修复或新特性。在这个"quartz-2.2.1"压缩包中,我们主要关注...

    spring整合quartz定时任务调度

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...

    quartzJAVA包和api

    6. **监听器(Listeners)**:Quartz提供了多种类型的监听器,如JobListener、TriggerListener和SchedulerListener,它们可以监听Job执行、Trigger触发和Scheduler的状态变化,从而实现更细粒度的控制和日志记录。...

    quartz-1.7.3

    - **调度器(Schedulers)**:调度器是Quartz的核心,负责管理和运行作业和触发器。 2. **Quartz-1.7.3 版本特性**: - **改进与修复**:此版本可能包含了对之前版本中发现的bug的修复,以提高整体稳定性和性能。...

    quartz 定时任务开发需要jar包

    - **调度策略**:Quartz支持多种调度策略,如SimpleTrigger(一次性或固定间隔执行)、CronTrigger(基于Cron表达式的时间规则执行)和NthIncludedDayTrigger(在特定月份的第N天执行)等。 - **集群支持**:...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    实现 Quartz 监听器 (第四部分) 内容提要:SchedulerListener (Scheduler 监听器) 的介绍和使用方法,多是关于对 Scheduler 管理事件的监听,而不只专注于 Job 或 Trigger 的。 第七章. 实现 Quartz 监听器 (第五...

    quartz分发包1.8.4

    4. **文档**:虽然未在文件列表中明确指出,但通常Quartz的分发包会包含一份详细的用户手册或API文档,帮助开发者理解框架的工作原理,掌握配置方法,以及如何编写和调度Job。 使用Quartz时,开发者需要注意以下...

    Quartz 文档 所用到的Jar包 简单示例

    3. **Quartz Jar包**:压缩包内的lib目录包含了Quartz运行所需的五个jar包,这些包包含了Quartz的核心库、依赖的第三方库,如SLF4J用于日志记录,可能还有其他的库如Apache Commons Lang或Commons Logging等。...

Global site tag (gtag.js) - Google Analytics