.net core quartz job作业调度管理组件
定时作业对于多数系统来说,都会用到,定时作业的实现方式可以有多种方式,简单的方式用Timer就可以实现,但是达不到通用的效果,本文采用Quartz基础组件来搭建一套企业通用的作业调度管理服务,希望对于有需求的朋友有所启发,望多多指正交流,项目地址:https://github.com/kuangqifu/CK.Sprite.Job。
Quartz API 的主要接口和类如下:
- IScheduler - 跟调度器交互的主要应用程序接口
- IJob - 你希望调度器执行的作业组件需要实现这个接口
- IJobDetail - 用来定义作业
- ITrigger - 定义指定作业的调度计划的组件
- JobBuilder - 用来定义/构建作业详情实例,并用来定义作业实例.
- TriggerBuilder - 用来定义/构建触发器实例
核心的即为job和trigger,定时作业就是围绕这两个概念进行展开。
数据库设计:
设计说明:
QuartzJobConfig表为作业核心表,包含了job和trigger的定义;HolidayCalendar为假期配置表。
一个job对应一个trigger执行,这里对quartz中job和trigger之间的关系做了简化,现实中一个job对应多个trigger执行的情况比较少,及时存在这样的情况,多创建一条job配置执行即可。
TriggerType(ETriggerType)触发器类型:
- Simple,简单触发器,只处理间隔时间执行的job,例如:每隔多少秒/分钟/小时执行job(使用SimpleIntervalUnit和SimpleIntervalValue字段)
- Cron,通用触发器,类似linux下crontab,能定义所有条件trigger,参见:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/crontrigger.html#introduction,(使用CronConfig字段)
- At,具体时间点作业
HolidayCalendarId,假期配置:
假期表外键,这里没有采用通用一个假期配置,可能存在不同工种假期不同情况,所以设计分开。
JobExecType,Job执行类型:
- API,ExecLocation地址为URL,配合Params字段一起使用
- Reflect,反射执行,执行job的执行类信息定义
- 其他,微服务等,配合ExecLocation和Params一起定义
类设计:
JobManager,quartz调度管理
主要直接与quartz提供的api打交道,程序启动、新建job配置、修改job配置、删除job配置时根据配置信息调用quartz中相应的api,另外开放出暂停恢复job等功能。
JobManagerService,job管理
数据库job配置与quartz组件同步管理,管理数据库job配置时候,同步管理quartz中job信息,可以实现通过界面api管理job配置时,同步管理quartz中的job调度。
CallAPIJob
通过http调用远程接口
CallReflectJob
从DataMap中获取execlocation信息,获取真正执行任务的类(从依赖注入中获取实例对象),传入参数,执行Job
关于代码说明:
CK.Sprite.Framework是采用Dapper根据DDD设计思想搭建的一套简易版本的框架,借鉴了一些abp的设计思想,去掉了权限验证等功能。
细节的地方就没有一一介绍了,直接看代码更容易理解。
.net core quartz job作业调度管理组件的更多相关文章
- .NET Core开源Quartz.Net作业调度框架实战演练
一.需求背景 人生苦短,我用.NET Core!作为一枚后端.NET开发人员,项目实践常遇到定时Job任务的工作,在Windows平台最容易想到的的思路Windows Service服务应用程序,而在 ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- Quartz.NET作业调度框架详解(转)
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...
- .net Quartz 服务 作业调度
.net项目中使用Quartz (1)在web.config中进行相关配置 <configSections> <section name="quartz" t ...
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- [转].NET Core中的认证管理解析
本文转自:http://www.cnblogs.com/durow/p/5783089.html 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用 ...
- 用Quartz进行作业调度(转)
概述 各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务. 对于一个典型的MIS系统来说,在每 ...
- Agile.Net 组件式开发平台 - 脚本管理组件
脚本管理组件用于管理系统查询脚本,由于数据查询的复杂性和可变性,平台规范要求使用查询使用建立在脚本管理器中的SQL语句.新增.更新.删除数据采用数据访问支持库API. 示例如下: 首先在脚本管理器中定 ...
- Agile.Net 组件式开发平台 - 内核管理组件
敏捷开发体系 软件构件技术:所谓软件构件化,就是要让软件开发像机械制造工业一样,可以用各种标准和非标准的零件来进行组装.软件的构件化和集成技术的目标是:软件系统可以由不同厂商提供的,用不同语言开发 ...
随机推荐
- Spring Aop 详解二
这是Spring Aop的第二篇,案例代码很详解,可以查看https://gitee.com/haimama/java-study/tree/master/spring-aop-demo. 阅读前,建 ...
- git删除缓存区中文件
删除缓冲区中的文件 git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除: git rm --f "文件路径",不仅将该文件从缓 ...
- 010_Markdown学习
目录 Markdown学习 标题 三级标题 四级标题 五级标题 六级标题 字体 引用 分割线 图片 超链接 列表 表格 代码 Markdown学习 标题 三级标题 四级标题 五级标题 六级标题 字体 ...
- 算法初步(julyedu网课整理)
date: 2018-11-19 13:41:29 updated: 2018-11-19 14:31:04 算法初步(julyedu网课整理) 1 O(1) 基本运算 O(logn) 二分查找 分治 ...
- 用匿名内部类实现 Java 同步回调
在一个应用系统中,不论使用何种编程语言,模块之间要进行调用,仅存在三种方式:同步调用.异步调用.回调.本文就其中回调方式进行详细解读,并通过匿名内部类的手段,在最后实现一个同步回调的过程. 一.回调的 ...
- 设计模式:策略模式(根据参数,调用不同的service接口)
1.定义类容器providers,当spring加载时@PostConstruct(类似构造方法),会先执行init() : 在init()中,反射"cn.jdk18"的所有带自定 ...
- 【转】Setting up SDL on Windows
FROM: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/index.php Setting up SDL on Windows Last ...
- Linux 系统编程 学习:09-线程:线程的创建、回收与取消
Linux 系统编程 学习:09-线程:线程的创建.回收与取消 背景 我们在此之前完成了 有关进程的学习.从这一讲开始我们学习线程. 完全的开发可以参考:<多线程编程指南> 在Linux ...
- FROM DELETE LIBRARY TO RUN の Django路由和视图
一.requests安装 · requests是什么? request是python实现的简单易使用的http库 · 如何安装? pip install requests ·检测是否成功 import ...
- python开发基础(二)常用数据类型调用方法
1 数字: int 2 3 int : 转换,将字符串转化成数字 4 num1 = '123' 5 num2 = int (a) 6 numadd = num2 +1000 7 print(num2) ...