一 前言:

各大调度组件优缺点在这就不讨论了,使用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)的更多相关文章

  1. quartz.net 基于数据库的简单实现

    前面简单学习了通过XML配置或者内存指定的方式实现调度任务.但此用法实战用途较小,企业上多需要分布式集群的方式.quart团队也考虑到了这点,于是有了我们今天要学习的.基于数据库实现分布式. Name ...

  2. 使用Quartz.NET进行任务调度管理

    1.Quartz.NET 介绍 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用 ...

  3. 基于Quqrtz.NET 做的任务调度管理工具

    基于Quqrtz.NET 做的任务调度管理工具 国庆前,需求让我看了一下任务调度的数据表设计.和之前一样,有100多个字段,p1 ~ p100, 我说这是干嘛啊!按这写,写死去了! 然后在网上搜了一下 ...

  4. Quartz.NET 的任务调度管理工具

    [更新] 基于Quartz.NET 的任务调度管理工具   更新列表: 任务参数可视化. 立即中断正在执行的任务. 每个任务独立的应用程序域 上一版参见: 基于Quqrtz.NET 做的任务调度管理工 ...

  5. quartz 定时任务调度管理器

    本项目使用的是spring-quartz 以下配置可以开启多个已知定时任务 <?xml version="1.0" encoding="UTF-8"?&g ...

  6. 基于WPF重复造轮子,写一款数据库文档管理工具(一)

    项目背景 公司业务历史悠久且复杂,数据库的表更是多而繁杂,每次基于老业务做功能开发都需要去翻以前的表和业务代码.需要理解旧的表的用途以及包含的字段的含义,表少还好说,但是表一多这就很浪费时间,而且留下 ...

  7. 如何基于WPF写一款数据库文档管理工具(二)

    系列目录 基于WPF重复造轮子,写一款数据库文档管理工具(一) 本篇重点 上次发表了基于WPF重复造轮子,写一款数据库文档管理工具(一) 得到不少人支持,文章一度上到了博客园推荐表首页,看来大家对这个 ...

  8. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  9. 基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

    距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里 ...

随机推荐

  1. Codeforces 1023 B.Pair of Toys (Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Fi)

    B. Pair of Toys 智障题目(嘤嘤嘤~) 代码: 1 //B 2 #include<iostream> 3 #include<cstdio> 4 #include& ...

  2. Educational Codeforces Round 30 B【前缀和+思维/经典原题】

    B. Balanced Substring time limit per test 1 second memory limit per test 256 megabytes input standar ...

  3. 解决ubuntu系统中wireshark:Couldn't run /usr/bin/dumpcap in child process: Permission denied的问题

    ubuntu系统运行WIreshark的时候,出现如下错误: Couldn't run /usr/bin/dumpcap in child process: Permission denied 解决办 ...

  4. 1.2(Spring MVC学习笔记) Spring MVC核心类及注解

    一.DispatcherServlet DispatcherServlet在程序中充当着前端控制器的作用,使用时只需在web.xml下配置即可. 配置格式如下: <?xml version=&q ...

  5. webstorm 2016

    2017.2.27更新 选择“license server” 输入:http://idea.imsxm.com/ 2016.2.2 版本的破解方式: 安装以后,打开软件会弹出一个对话框:选择“lice ...

  6. 理解Android绘制视图的方式

    在创建自定义ViewGroup前,读者首先需要理解Android绘制视图的方式.我不会涉及过多细节,但是需要读者理解Android开发文档(见3.5节)中的一段话,这段话解释如何绘制一个布局.内容如下 ...

  7. Synergy – 教你在局域网中用一套键盘/鼠标控制多台电脑

    想必很多人都拥有多台电脑,譬如台式机+笔记本,很多时候我们都会同时打开它们工作.可是你有没发现,如果桌子上摆放着多台电脑多套键盘鼠标,不停来回切换使用是否很累呢?如果说现在可以只用一套键鼠,就能同时控 ...

  8. 《新一代视频压缩码标准-H.264_AVC》读书笔记1

    摘要 第一章 绪论 正文 1.一般而言,视频信号信息量大,传输网络所需要的带宽相对较宽.例如,一路可视电话或会议电视信号,由于其活动内容较少,所需带宽较窄,但要达到良好质量,不压缩约需若干 Mbps, ...

  9. ZK的数据结构特点

    ZK的数据结构特点 ZooKeeper这种数据结构有如下这些特点: 1. 每个子目录项如NameService都被称作znode,这个znode是被它所在的路径唯一标识,如Server1这个znode ...

  10. 使用Spring Boot集成FastDFS

    原文:http://www.cnblogs.com/ityouknow/p/8298358.html#3893468 上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Sp ...