我心中的核心组件(可插拔的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; }

运行后的效果如图

本文转自博客园张占岭(仓储大叔)的博客,原文链接:我心中的核心组件(可插拔的AOP)~调度组件quartz.net续~任务管理器的开发(CronTrigger强大功能),如需转载请自行联系原博主。

目录
相关文章
|
16天前
|
设计模式 开发框架 JavaScript
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
122 3
|
16天前
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统
|
2月前
|
XML Java 数据格式
使用完全注解的方式进行AOP功能实现(@Aspect+@Configuration+@EnableAspectJAutoProxy+@ComponentScan)
本文介绍了如何使用Spring框架的注解方式实现AOP(面向切面编程)。当目标对象没有实现接口时,Spring会自动采用CGLIB库进行动态代理。文中详细解释了常用的AOP注解,如`@Aspect`、`@Pointcut`、`@Before`等,并提供了完整的示例代码,包括业务逻辑类`User`、配置类`SpringConfiguration`、切面类`LoggingAspect`以及测试类`TestAnnotationConfig`。通过这些示例,展示了如何在方法执行前后添加日志记录等切面逻辑。
159 2
使用完全注解的方式进行AOP功能实现(@Aspect+@Configuration+@EnableAspectJAutoProxy+@ComponentScan)
|
16天前
|
开发框架 JavaScript 前端开发
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
2024年全面且功能强大的.NET快速开发框架推荐,效率提升利器!
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
37 1
|
2月前
|
监控 网络安全 调度
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
72 1
|
21天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
31 0
|
2月前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
44 7