Quartz.net基于数据库的任务调度管理(Only.Jobs)
一 前言:
各大调度组件优缺点在这就不讨论了,使用Quartz.net是因为它可以执行秒级任务。
Only.Jobs 项目通过将各Job存储在数据库中,启动一个专门的Job管理任务来循环调度各Job的的调度情况。
项目分为 Web管理系统 、服务运行端 、数据提供逻辑处理层
数据访问使用了 SqlSugar 4.1.1.5版本,目前支持MySql、SqlServer
采用Quartz.net+Topshelf 可安装为windows服务。
二 项目结构:
一一介绍下:
Only.Jobs.Items 下是创建的测试Job项目。
Only.Jobs 是一个调度服务项目,集成了Topshelf,可安装成windows服务。
Only.Jobs.Core 是项目的核心层,对外提供数据操作。
Only.Jobs.Web 为调度任务的管理和状态监控管理系统。
先来看下总体效果吧
运行Only.Jobs.Web项目:
在任务管理模块可停止、启用各Job.
三 表结构介绍
BackgroundJob 为任务信息存储表
BackgroundJobLog 为任务执行跟踪日志表
四 实现介绍
通过任务管理模块将开发好的Job所在的项目配置起来,存储到BackgroundJob表中。
在Only.Jobs项目中创建ManagerJob 类,Job调度任务管理。
[DisallowConcurrentExecution]
public class ManagerJob : IJob
{
private readonly ILog _logger = LogManager.GetLogger(typeof(ManagerJob));
public void Execute(IJobExecutionContext context)
{
Version Ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
_logger.InfoFormat("ManagerJob Execute begin Ver." + Ver.ToString());
try
{
new QuartzManager().JobScheduler(context.Scheduler);
_logger.InfoFormat("ManagerJob Executing ...");
}
catch (Exception ex)
{
JobExecutionException e2 = new JobExecutionException(ex);
e2.RefireImmediately = true;
}
finally
{
_logger.InfoFormat("ManagerJob Execute end ");
}
}
}
JobScheduler 方法:
/// <summary>
/// Job状态管控
/// </summary>
/// <param name="Scheduler"></param>
public void JobScheduler(IScheduler Scheduler)
{
List<BackgroundJobInfo> list = new BackgroundJobService().GeAllowScheduleJobInfoList();
if (list != null && list.Count > 0)
{
foreach (BackgroundJobInfo jobInfo in list)
{
JobKey jobKey = new JobKey(jobInfo.BackgroundJobId.ToString(), jobInfo.BackgroundJobId.ToString() + "Group");
if (Scheduler.CheckExists(jobKey) == false)
{
if (jobInfo.State == 1 || jobInfo.State == 3)
{
ScheduleJob(Scheduler, jobInfo);
if (Scheduler.CheckExists(jobKey) == false)
{
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
}
else
{
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 1);
}
}
else if (jobInfo.State == 5)
{
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
}
}
else
{
if (jobInfo.State == 5)
{
Scheduler.DeleteJob(jobKey);
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
}
else if (jobInfo.State == 3)
{
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 1);
}
}
}
}
}
其他的简单的就不在这描述了。
接下来看下运行效果:
启动Only.Jobs项目
仅仅是一个工具项目而已,大家可尽管仍砖头过来。代码已上传github https://github.com/mamingbo/Only.Jobs 欢迎下载使用。
相关文章:
基于Quartz.net 的开源任务管理平台
使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】
开源任务管理平台TaskManager介绍
原文地址:http://www.cnblogs.com/mamingbo/p/7142057.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
Quartz.net基于数据库的任务调度管理(Only.Jobs)相关推荐
- 基于java安防管理平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java安防管理平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java安防管理平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: 项目架构 ...
- 基于JAVA干洗店订单管理系统设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA干洗店订单管理系统设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA干洗店订单管理系统设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目 ...
- 基于JAVA评标专家管理信息系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
基于JAVA评标专家管理信息系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA评标专家管理信息系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: ...
- 基于JAVA高校实习管理平台系统计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA高校实习管理平台系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA高校实习管理平台系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 ...
- 基于JAVA薪酬福利管理信息系统计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA薪酬福利管理信息系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA薪酬福利管理信息系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...
- 基于WPF重复造轮子,写一款数据库文档管理工具(一)
项目背景 公司业务历史悠久且复杂,数据库的表更是多而繁杂,每次基于老业务做功能开发都需要去翻以前的表和业务代码.需要理解旧的表的用途以及包含的字段的含义,表少还好说,但是表一多这就很浪费时间,而且留下 ...
- 基于JAVA中小学教务管理平台计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA中小学教务管理平台计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA中小学教务管理平台计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开 ...
- 基于JAVA学生住宿管理平台计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA学生住宿管理平台计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA学生住宿管理平台计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...
- 基于java的土地档案管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)
项目报告 土地档案管理关系 研究土地档案管理关系即为实现一个土地档案管理系统.土地档案管理系统是将现有的历史纸质档案资料进行数字化加工处理,建成标准化的网络基础资料数据库,同时建成一套基于计算机网络应 ...
最新文章
- Spring事务传播性与隔离级别
- [YTU]_2907 (类重载实现矩阵加法)
- 图像数据流识别圆形_人工智能大赛视觉处理(一)图形识别
- 机器学习基础6--集群模型和算法
- 贵大计算机在职,贵州大学在职研究生招生信息网
- 将python算法转为scala_将Python转换为scalaasp
- javascript删除数组某个元素
- [Stage3D]入门讲稿
- git bash提交代码步骤
- 微信商户收款码在哪里下载 -PC端
- android8 锁屏壁纸,小米8怎么设置锁屏壁纸?小米8锁屏壁纸三种设置教程
- IoT坐标系下,智能路由器将画出一条怎样的进化曲线?
- 题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。 输入格式: 一系列正整数,整数的范围是(0,100000)。如果输入
- 再介绍一篇最新的Contrastive Self-supervised Learning综述论文
- 为什么那么多公司在用快速开发平台开发软件?下表说明了一切
- Excel技巧:合并单元格后分组排序
- CSDN日报180521——《如何选择值得深入学习的技术方向》
- Cardboard -VR全景浏览
- 2d激光重定位系列(一)AMCL:算法源码参数 相关资源整合
- python3.7-初学篇-07
热门文章
- [深入JUnit] 测试运行的入口
- 用GCD线程组与GCD信号量将异步线程转换为同步线程
- 模拟 hihoCoder 1177 顺子
- 单词计数WordCountApp.class
- java.net.sockettimeoutexception read timed out
- 使用Blazor做个简单的时间戳在线转换工具
- .NET 6新特性试用 | 常量内插字符串
- .NET 6新特性试用 | 隐式using指令
- 如何将 DateTime 转成 UnixTime ?
- .NET 6 Preview 3 发布