`
yimeng528
  • 浏览: 183853 次
  • 性别: 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.    }  
分享到:
评论

相关推荐

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

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

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

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

    Java开源的分布式任务调度平台 xxl-job.zip

    3、调度HA:“调度中心”基于集群Quartz实现,可保证调度中心HA; 4、任务HA:任务支持多地址配置,可保证任务执行HA; 5、任务Failover:多地址配置时,调度失败时将会平滑切换执行器进行Failover; 6、...

    基于SpringBoot+Quartz的轻量级分布式定时任务调度系统源码+项目说明+sql数据库.zip

    基于SpringBoot+Quartz的轻量级分布式定时任务调度系统源码+项目说明+sql数据库.zip 主要技术选型 1、后端: - SpringBoot 2.6.11 - Quartz 2.3.2 - Mybatis-Plus 3.5.3.2 - Httpclient 4.5.13 2、前端: - Layui ...

    .net 简单任务调度平台

    1) 平台基于quartz.net进行任务调度功能开发,采用C#代码编写, 支持corn表达式和第三方自定义的corn表达式扩展。 2) 架构以插件形式开发,具有良好的功能扩展性,稳定性,简单性,便于第三方开发人员进一步进行功能...

    Quartz Cron表达式生成器

    例如在4#2,表示某月的第二个星期三。 举几个例子: 0 0 2 1 * ? * 表示在每月的1日的凌晨2点调度任务 0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业 0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的...

    .net 分布式任务调度平台

    1) 平台基于quartz.net进行任务调度功能开发,采用C#代码编写, 支持corn表达式和第三方自定义的corn表达式扩展。 2) 架构以插件形式开发,具有良好的功能扩展性,稳定性,简单性,便于第三方开发人员进一步进行功能...

    Quartz Job Scheduling Framework_CN_V1.0.0.pdf

    第四章. 部署 Job (第一部分) 第五章. Cron 触发器及相关内容 (第一部分) 第六章. Job 存储和持久化 (第一部分) 第八章. 使用 Quartz 插件 (第一部分) 第九章. 使用 Quartz 的远程方式 (第一部分) ....

    Spring+3.x企业应用开发实战光盘源码(全)

     第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。  第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。  第15章:对...

    陈开雄 Spring+3.x企业应用开发实战光盘源码.zip

     第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。  第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。  第15章:...

    基于Spring Boot的社区论坛项目 SSM、Redis、Kafka、Quartz、Spring +源代码+文档说明

    - Quartz:定时调度框架 - Nginx - Thymeleaf:模板引擎 - Caffeine:Java本地缓存库 - MySQL - 七牛云:第三方文件存储服务 ### 各个功能模块所对应的技术点 ![功能模块对应的技术点]...

    Java课程实验 Spring Boot 任务管理(源代码+实验报告)

    Quartz提供了更多的调度策略、任务监听器等功能。 以上是一些在Spring Boot中实现任务管理的常见方案。你可以根据具体需求选择合适的方式来执行任务,并通过配置和注解来定制任务的执行时间和逻辑。

    企业后台管理基础框架 hsweb.zip

    演示示例:demo.hsweb.me测试用户:test (test2,test3,test4....) 密码:123456演示项目源码:hsweb-demo技术选型第三方:MVC:spring-boot. 开箱即用,学习成本低,部署方便(main方法运行).ORM:mybatis. 配置灵活,简单方便...

    基于Spring Boot的社区论坛项目源码+数据库+项目说明.zip

    - Quartz:定时调度框架 - Nginx - Thymeleaf:模板引擎 - Caffeine:Java本地缓存库 - MySQL - 七牛云:第三方文件存储服务 ### 各个功能模块所对应的技术点 ![功能模块对应的技术点]...

    spring in action英文版

     7.3.2 使用Quartz调度器  7.3.3 按调度计划调用方法  7.4 使用JMS发送消息  7.4.1 使用JMS模板发送消息  7.4.2 消费消息  7.4.3 转换消息  7.5 小结 第三部分 Spring在Web层的应用  第8章...

    Spring in Action(第2版)中文版

    12.3.2使用quartz调度器 12.3.3按调度计划调用方法 12.4使用jmx管理springbean 12.4.1将springbean输出为mbean 12.4.2远程访问mbean 12.4.3处理通知 12.5小结 第三部分spring客户端 第13章处理web请求 13.1...

    Spring in Action(第二版 中文高清版).part2

    12.3.2 使用Quartz调度器 12.3.3 按调度计划调用方法 12.4 使用JMX管理Spring Bean 12.4.1 将Spring Bean输出为MBean 12.4.2 远程访问MBean 12.4.3 处理通知 12.5 小结 第三部分 Spring客户端 第13章 处理...

    Spring in Action(第二版 中文高清版).part1

    12.3.2 使用Quartz调度器 12.3.3 按调度计划调用方法 12.4 使用JMX管理Spring Bean 12.4.1 将Spring Bean输出为MBean 12.4.2 远程访问MBean 12.4.3 处理通知 12.5 小结 第三部分 Spring客户端 第13章 处理...

    JBOSS ESB程序员指南

    11.6. Quartz日程调度器的属性配置 56 12. 第十章 配置 57 12.1. 概述 57 12.2. 提供者 57 12.3. 服务 58 12.4. 特殊类型的传输实现 61 12.5. FTP 提供者配置 62 12.6. FTP 监听器配置 63 12.7. Read-only FTP ...

    iBase4J分布式系统-其他

    4、调度:Spring+quartz, 可以查询、修改周期、暂停、删除、新增、立即执行,查询执行记录等。5、基于session的国际化提示信息,职责链模式的本地语言拦截器,Shiro登录、URL权限管理。会话管理,强制结束会话。6、...

Global site tag (gtag.js) - Google Analytics