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 > )
{
foreach (BackgroundJobInfo jobInfo in list)
{
JobKey jobKey = new JobKey(jobInfo.BackgroundJobId.ToString(), jobInfo.BackgroundJobId.ToString() + "Group");
if (Scheduler.CheckExists(jobKey) == false)
{
if (jobInfo.State == || jobInfo.State == )
{
ScheduleJob(Scheduler, jobInfo);
if (Scheduler.CheckExists(jobKey) == false)
{
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, );
}
else
{
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, );
}
}
else if (jobInfo.State == )
{
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, );
}
}
else
{
if (jobInfo.State == )
{
Scheduler.DeleteJob(jobKey);
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, );
}
else if (jobInfo.State == )
{
new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, );
}
}
}
}
}
其他的简单的就不在这描述了。
接下来看下运行效果:
启动Only.Jobs项目


仅仅是一个工具项目而已,大家可尽管仍砖头过来。
代码已上传github
https://github.com/mamingbo/Only.Jobs 欢迎下载使用。
Quartz.net基于数据库的任务调度管理(Only.Jobs)的更多相关文章
- quartz.net 基于数据库的简单实现
前面简单学习了通过XML配置或者内存指定的方式实现调度任务.但此用法实战用途较小,企业上多需要分布式集群的方式.quart团队也考虑到了这点,于是有了我们今天要学习的.基于数据库实现分布式. Name ...
- 使用Quartz.NET进行任务调度管理
1.Quartz.NET 介绍 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用 ...
- 基于Quqrtz.NET 做的任务调度管理工具
基于Quqrtz.NET 做的任务调度管理工具 国庆前,需求让我看了一下任务调度的数据表设计.和之前一样,有100多个字段,p1 ~ p100, 我说这是干嘛啊!按这写,写死去了! 然后在网上搜了一下 ...
- Quartz.NET 的任务调度管理工具
[更新] 基于Quartz.NET 的任务调度管理工具 更新列表: 任务参数可视化. 立即中断正在执行的任务. 每个任务独立的应用程序域 上一版参见: 基于Quqrtz.NET 做的任务调度管理工 ...
- quartz 定时任务调度管理器
本项目使用的是spring-quartz 以下配置可以开启多个已知定时任务 <?xml version="1.0" encoding="UTF-8"?&g ...
- 基于WPF重复造轮子,写一款数据库文档管理工具(一)
项目背景 公司业务历史悠久且复杂,数据库的表更是多而繁杂,每次基于老业务做功能开发都需要去翻以前的表和业务代码.需要理解旧的表的用途以及包含的字段的含义,表少还好说,但是表一多这就很浪费时间,而且留下 ...
- 如何基于WPF写一款数据库文档管理工具(二)
系列目录 基于WPF重复造轮子,写一款数据库文档管理工具(一) 本篇重点 上次发表了基于WPF重复造轮子,写一款数据库文档管理工具(一) 得到不少人支持,文章一度上到了博客园推荐表首页,看来大家对这个 ...
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- 基于DDDLite的权限管理OpenAuth.net 1.0版正式发布
距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里 ...
随机推荐
- BZOJ 1185: [HNOI2007]最小矩形覆盖-旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标-备忘板子
来源:旋转卡壳法求点集最小外接矩形(面积)并输出四个顶点坐标 BZOJ又崩了,直接贴一下人家的代码. 代码: #include"stdio.h" #include"str ...
- HDU 1061.Rightmost Digit-规律题 or 快速幂取模
Rightmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- HDU 2087 剪花布条【在字符串中不可重叠地寻找子串数量】
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和 ...
- apache httpd反向代理配置
apache httpd 2.4.6反向代理的配置,用户访问A server的8080端口,后台会自动请求Bserver的一个端口. 例如,用户访问ip-172-31-28-175的8080端口,后台 ...
- 集训考试题(CF510C Fox And Names的简化版)
题目描述给定n个由小写字母组成的字符串,请你求出一个字母表顺序,使得这n个字符串是按照字典序升序排列的,数据保证存在合法的字母表顺序.如果存在多个解,输出字典序最小的那个. 输入格式第一行一个整数n. ...
- Linux命令之fdisk
fdisk fdisk [选项] <disk> 改变分区表 fdisk [选项] –l <disk> 列出所有分区表 fdisk –s <partition(分区编号 ...
- ASP.NET Core 2.2 基础知识(十一) ASP.NET Core 模块
ASP.NET Core 应用与进程内的 HTTP 服务器实现一起运行.该服务器实现侦听 HTTP 请求,并在一系列请求功能被写到 HttpContext 时,将这些请求展现到应用中. ASP.NET ...
- 【二分答案】【最大流】bzoj1305 [CQOI2009]dance跳舞
http://hzwer.com/1986.html #include<cstdio> #include<algorithm> #include<queue> #i ...
- 《深入理解Spark-核心思想与源码分析》(二)第二章Spark设计理念和基本架构
若夫乘天地之正,而御六气之辩解,以游无穷者,彼且恶乎待哉? ——<庄子.逍遥游> 翻译:至于遵循宇宙万物的规律,把握“六气”的变化,遨游于无穷无尽的境域,他还仰赖什么呢! 2.1 初始Sp ...
- Bean的装配方式
(一) 知识点:Spring容器支持多种形式的Bean的装配方式,比如基于XML的装配,基于注解的装配和自动装配(最常用的就是基于注解的装配) Spring提供了两种基于xml的装配方式:设值注入(S ...