我心中的核心组件(可插拔的AOP)~调度组件quartz.net续~任务管理器的开发(CronTrigger强大功能)

回到目录

上次我们开发了一个quartz的管理工具,主要使用的是Simple Trigger做为触发器的,如果各位觉得它过于简单不能实现我们的功能,我们可以引入Cron这个概念,它叫做时间表达式,它可以灵活的去设置各种策略,我们先来看一下cron expression的一些基础的知识吧

格式: [秒] [分] [小时] [日] [月] [周] [年]
序号     说明       是否必填      允许填写的值       允许的通配符
 1           秒               是                  0-59                   , - * /
 2           分               是                  0-59                   , - * /
 3          小时            是                  0-23                    , - * /
 4          日               是                  1-31                     , - * ? / L W
 5          月               是           1-12 or JAN-DEC        , - * /
 6          周              是            1-7 or SUN-SAT          , - * ? / L #
 7          年               否         empty 或 1970-2099      , - * /

通配符说明:

1. 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。

2. 星号(*)字符是通配字符,表示该字段可以接受任何可能的值(例如:在分的字段上设置 "*",表示每一分钟都会触发)。

3. 问号(?)问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在月内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。

4. -  表示区间,例如 在小时上设置 "10-12",表示 10,11,12点都会触发。

5. 逗号(, ) 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发

6. 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。

7. L 表 示最后的意思。在日字段设置上,表示当月的最后一天(依据当前月份,如果是二月还会依据是否是润年[leap]), 在周字段上表示星期六,相当于"7" 或"SAT"。如果在"L"前加上数字,则表示该数据的最后一个。例如在周字段上设置"6L"这样的格式,则表示“本月最后一个星期五"。
8. W 表
示离指定日期的最近那个工作日(周一至周五). 例如在日字段上设置"15W",表示离每月15号最近的那个工作日触发。如果15号正好是周六,则找最近
的周五(14号)触发, 如果15号是周未,则找最近的下周一(16号)触发.如果15号正好在工作日(周一至周五),则就在该天触发。如果指定格式
为 "1W",它则表示每月1号往后最近的工作日触发。如果1号正是周六,则将在3号下周一触发。(注,"W"前只能设置具体的数字,不允许区
间"-")。

注:‘L‘和 ‘W‘可以一组合使用。如果在日字段上设置"LW",则表示在本月的最后一个工作日触发。

常用示例

0 10 * * * ?--------------每个小时过10分执行一次

0 0/32 8,12 * * ? ----------每天8:32,12:32 执行一次

0 0/2 * * * ?--------------每2分钟执行一次

0 0 12 * * ?---------------在每天中午12:00触发

0 15 10 ? * *---------------每天上午10:15 触发

0 15 10 * * ?---------------每天上午10:15 触发

0 15 10 * * ? *---------------每天上午10:15 触发

0 15 10 * * ? 2005---------------在2005年中的每天上午10:15 触发

0 * 14 * * ?---------------每天在下午2:00至2:59之间每分钟触发一次

0 0/5 14 * * ?---------------每天在下午2:00至2:59之间每5分钟触发一次

0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之间的每5分钟触发一次

0 0-5 14 * * ?---------------每天在下午2:00至2:05之间每分钟触发一次

0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和2:44时触发

0 15 10 ? * MON-FRI---------------从星期一至星期五的每天上午10:15触发

0 15 10 15 * ?---------------在每个月的每15天的上午10:15触发

0 15 10 L * ?---------------在每个月的最后一天的上午10:15触发

0 15 10 ? * 6L---------------在每个月的最后一个星期五的上午10:15触发

0 15 10 ? * 6L 2002-2005---------------在2002, 2003, 2004 and 2005年的每个月的最后一个星期五的上午10:15触发

0 15 10 ? * 6#3---------------在每个月的第三个星期五的上午10:15触发

0 0 12 1/5 * ?---------------从每月的第一天起每过5天的中午12:00时触发

0 11 11 11 11 ?---------------在每个11月11日的上午11:11时触发.

最后设计一下模型

   /// <summary>
    /// Cron 触发器对象
    /// </summary>
    public class QuartzCronModel
    {
        [DisplayName("任务名称")]
        [Required]
        public string JobName { get; set; }
        [DisplayName("工作组名称")]
        [Required]
        public string JobGroup { get; set; }
        [DisplayName("任务程序集")]
        [Required]
        public string Dll { get; set; }
        [DisplayName("触发器名称")]
        [Required]
        public string TriggerName { get; set; }
        [DisplayName("触发器工作组")]
        [Required]
        public string TriggerGroup { get; set; }
        [DisplayName("Cron表达式")]
        [Required]
        public string CronExpression { get; set; }
        [DisplayName("运行状态")]
        [ReadOnly(true)]
        public TriggerState RunStatus { get; set; }

运行后的效果如图

回到目录

时间: 2024-11-05 00:48:52

我心中的核心组件(可插拔的AOP)~调度组件quartz.net续~任务管理器的开发(CronTrigger强大功能)的相关文章

我心中的核心组件(可插拔的AOP)~大话开篇及目录

我心中的核心组件(可插拔的AOP)~大话开篇及目录 http://www.cnblogs.com/lori/p/3247905.html 回到占占推荐博客索引 核心组件 我心中的核心组件,核心组件就是我认为在项目中比较常用的功能,如日志,异常处理,消息,邮件,队列服务,调度,缓存,持久化,分布式文件存储,NoSQL存储,IoC容器,方法拦截等等. 对于以上内容可以说即是一个大餐,又是一个挑战,就让我带着大家去迎接这份挑战吧,呵呵! 可插拔的AOP AOP即面向切面的编程,是指将一个公用的与领域无

助力深度学习!阿里开源可插拔 GPU 共享调度工具

根据 Gartner 对全球 CIO 的调查结果显示,人工智能将成为 2019 年组织革命的颠覆性力量.对于人工智能来说,算力即正义,成本即能力,利用 Docker 和 Kubernetes 代表云原生技术为 AI 提供了一种新的工作模式,将 GPU 机器放到统一的资源池进行调度和管理,这避免了GPU 资源利用率低下和人工管理的成本.因此,全球主要的容器集群服务厂商 Kubernetes 都提供了 Nvidia GPU 容器集群调度能力,但是通常都是将一个 GPU 卡分配给一个容器.这虽然可以实

我心中的核心组件(可插拔的AOP)~消息组件~完善篇

回到目录 为什么要有本篇文章 本篇文章主要实现了RTX消息生产者,并且完成了整体的设计方式,之前在设计时消息生产者全局使用单一的生产方式,即一个项目里使用了Email就不能使用SMS,这种设计方法和实际不相符,虽然在性能上是最佳的(采用了单例模型,维护一个生产者,使用策略模式进行生产者的实现,使用工厂模式生产具体生产者),实际项目中,应该是可以自动选择消息生产者的,当然为了程序的性能,我们还必须使用单例模式来生产具体生产者,这种单例,在本程序中,采用了具体类型,具体单例的方法,即Email自己维

我心中的核心组件(可插拔的AOP)~分布式Session组件

对于目前的网站来说,为了满足高可用,高并发,高负载,一台WEB服务器已经远远不够用了,以后的WEB应用服务器应该是一种集群的环境,它们之间使用一些工具进行数据的同步,在由1台变成多台服务器时,有一个问题是我们必须要考虑的,Session机制,我们都知道Session被用来存储用户的一些凭证信息,持久化到服务器上,这在安全性方面得到了保证(比存储到客户端的cookies),而当你的WEB应用服务器是多台时(多台之间做了负载均衡),这种Session机制就有问题了,因为你无法实现从一台服务器到别一台

我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS

回到目录 一些概念 在大叔框架里总觉得缺点什么,在最近的项目开发中,终于知道缺什么了,分布式文件存储组件,就是缺它,呵呵,对于分布式文件存储来说,业界比较公认的是FastDFS组件,它自己本身就是集群机制,有自己的路由选择和文件存储两个部分,我们通过FastDFS的客户端进行上传后,它会返回一个在FastDFS上存储的路径,这当然是IO路径,我们只要在服务器上开个Http服务器,就可以以Http的方法访问你的文件了. 我的组件实现方式 前端上传控件(表单方式,swf方式,js方法均可)将文件流传

C#.NET U盘插拔监控

[1]涉及的知识点 1) windows消息处理函数 ? 1 protected override void WndProc(ref Message m) 捕获Message的系统硬件改变发出的系统消息 2) 硬件信息类 ? 1 DriveInfo [2]核心函数 消息常量: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /// <summary> /// windows消息常量 /// </summary> class CWn

MFC检测串口插拔

以对话框工程为例 头文件中 afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData); cpp中 ON_WM_DEVICECHANGE() 然后实现函数 BOOL CXXDlg::OnDeviceChange(UINT nEventType,DWORD dwData) { //0x4d36e978L, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 //DEV

玩转Oracle之12c 可插拔数据库数据泵功能体验

:数据泵可以高效备份.复制.保护和传输大量的数据和源数据.在导入和导出过程中可以做到过滤数据和对象,并且能够在全数据库级.方案级.表级和表空间级实现导入导出. Oracle12c的datapump功能跟以前差不多,在多租户的环境中执行导入\导出以及使用一些更细化的参数的时候,几乎没有区别,依然很好用,效率很高.目前有很多的用户仍然在使用exp/imp工具在执行一些迁移.备份.过滤和转移数据的工作,相比起来,数据泵的效率更高.更易用并且更方便管理,但exp/imp在有些时候可以完成datapump

USB-Blaster的插拔顺序

前几天发现我的fpga的板子的jtag口不慎烧坏了,万分悲痛,先实验室大神级的师兄请教了一下,他让我看个文档,原来发现自己经常对插拔顺序很不规范,很有可能就是因为这个原因二导致的.以下是建议的插拔顺序,觉得有点道理,贴出来和大家分享一下. 推荐插拔顺序 插线顺序 1. 关闭FPGA开发板的电源: 2. 将JTAG仿真器的JTAG线缆连接至FPGA开发板的JTAG接口: 3. 在仿真器的USB接口上插入USB线缆(假设USB线缆的另一段已经插在电脑上): 4. 打开FPGA开发板的电源. 步骤2和