定时作业对于多数系统来说,都会用到,定时作业的实现方式可以有多种方式,简单的方式用Timer就可以实现,但是达不到通用的效果,本文采用Quartz基础组件来搭建一套企业通用的作业调度管理服务,希望对于有需求的朋友有所启发,望多多指正交流,项目地址:https://github.com/kuangqifu/CK.Sprite.Job

Quartz API 的主要接口和类如下:

  1. IScheduler - 跟调度器交互的主要应用程序接口
  2. IJob - 你希望调度器执行的作业组件需要实现这个接口
  3. IJobDetail - 用来定义作业
  4. ITrigger - 定义指定作业的调度计划的组件
  5. JobBuilder - 用来定义/构建作业详情实例,并用来定义作业实例.
  6. TriggerBuilder - 用来定义/构建触发器实例

  核心的即为job和trigger,定时作业就是围绕这两个概念进行展开。

数据库设计:

设计说明:

QuartzJobConfig表为作业核心表,包含了job和trigger的定义;HolidayCalendar为假期配置表。

一个job对应一个trigger执行,这里对quartz中job和trigger之间的关系做了简化,现实中一个job对应多个trigger执行的情况比较少,及时存在这样的情况,多创建一条job配置执行即可。

TriggerType(ETriggerType)触发器类型:

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作业调度管理组件的更多相关文章

  1. .NET Core开源Quartz.Net作业调度框架实战演练

    一.需求背景 人生苦短,我用.NET Core!作为一枚后端.NET开发人员,项目实践常遇到定时Job任务的工作,在Windows平台最容易想到的的思路Windows Service服务应用程序,而在 ...

  2. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  3. Quartz.NET作业调度框架详解(转)

    Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...

  4. .net Quartz 服务 作业调度

    .net项目中使用Quartz   (1)在web.config中进行相关配置 <configSections> <section name="quartz" t ...

  5. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  6. [转].NET Core中的认证管理解析

    本文转自:http://www.cnblogs.com/durow/p/5783089.html 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用 ...

  7. 用Quartz进行作业调度(转)

    概述 各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务. 对于一个典型的MIS系统来说,在每 ...

  8. Agile.Net 组件式开发平台 - 脚本管理组件

    脚本管理组件用于管理系统查询脚本,由于数据查询的复杂性和可变性,平台规范要求使用查询使用建立在脚本管理器中的SQL语句.新增.更新.删除数据采用数据访问支持库API. 示例如下: 首先在脚本管理器中定 ...

  9. Agile.Net 组件式开发平台 - 内核管理组件

    敏捷开发体系   软件构件技术:所谓软件构件化,就是要让软件开发像机械制造工业一样,可以用各种标准和非标准的零件来进行组装.软件的构件化和集成技术的目标是:软件系统可以由不同厂商提供的,用不同语言开发 ...

随机推荐

  1. 前端基础——HTML(一)

    HTML html超文本标记语言 前端三层 HTML结构层 css样式层 JavaScript行为层 其他多媒体内容(图片,音频等等) 互联网运行过程 客 --http请求--> 服 户 htt ...

  2. js 日期格式、内容合法、比较大小、表单提交验证

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"/> 5 &l ...

  3. 刷题不应该刷leecode 应该刷oj

    因为leecode有很多题目 表述不清 意义不明 最关键的是 leecode压根不规定输入输出的格式 这个完全不是竞赛的风格 这样会养成很多坏习惯

  4. 自己动手实现一个简单的 IOC容器

    控制反转,即Inversion of Control(IoC),是面向对象中的一种设计原则,可以用有效降低架构代码的耦合度,从对象调用者角度又叫做依赖注入,即Dependency Injection( ...

  5. 4G DTU采用的4G通信模块介绍

      4g通信模块一种基于4G网络进行数据传输的工业级通讯终端,其主要作用是将采集到的传感器数据.仪表数据,传输至服务器/上位机.监控中心.众山研发生产的4g无线通讯设备--4G DTU是一款物联网数据 ...

  6. 水题挑战3: NOIP 2017 宝藏

    参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 \(n\) 个深埋在地下的宝藏屋, 也给出了这 \(n\) 个宝藏屋之间可供开发的 \(m\) 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋 ...

  7. MySQL安装及安装问题解答(二)

    在安装过程中难免会有一些异常情况出现,笔者对一部分异常情况做出解答以供参考 1.MySQL未能成功启动 在输入net start mysql后提示 MySQL 服务正在启动, MySQL 服务无法启动 ...

  8. .netcore 简单使用ElasticSearch

    .netcore 简单使用ElasticSearch(7.6) 最近在捣鼓学习了下ElasticSearch,在此记录下使用.netcore操作elastic search 的实现(简单的封装,使用) ...

  9. 6.1 接口 - 6.3 lambda表达式

    6.1 接口 接口概念 接口是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义.设计目的是解决多继承的问题 接口中所有方法时 public 不用现实声明 java.lang.Comparab ...

  10. ()C++中的赋值运算符重载函数(operator=)

    本文主要介绍C++中的重载操作符(operator)的相关知识. 概述 1.1 what operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将ope ...