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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

畅想小组KTV点歌系统简介

19级青鸟三班畅想小组指导老师&#xff1a;穆雄雄老师班主任&#xff1a;王欣欣老师小组成员:组长:毛帅龙 副组长:扈明旺组员:张俊豪 靖相民 袁康凯 魏子凯 李明义 魏婉莹 谢润祺 项目整体运行视频&#xff1a;1主页面功能&#xff1a;可以根据用户所需要的页面进行显示和隐藏…

使用Docker Swarm搭建分布式爬虫集群

转载自 使用Docker Swarm搭建分布式爬虫集群 在爬虫开发过程中&#xff0c;你肯定遇到过需要把爬虫部署在多个服务器上面的情况。此时你是怎么操作的呢&#xff1f;逐一SSH登录每个服务器&#xff0c;使用git拉下代码&#xff0c;然后运行&#xff1f;代码修改了&#xff0c;…

Docker~从Dockerfile到Container的过程

上一文章&#xff0c;主要介绍Dockerfile里各参数的含义&#xff0c;以及在项目文件里这些内容的含义&#xff0c;因为大叔认为官方和网上其它文章说的有些模棱两可&#xff0c;不太好让大家理解&#xff0c;所有我又从新写了一个大白话的文章&#xff0c;希望可以给大家一些帮…

驭梦KTV点歌系统简介

19级青鸟三班驭梦小组指导老师&#xff1a;穆雄雄老师班主任&#xff1a;王欣欣老师小组成员&#xff1a;组 长&#xff1a;刘文瑞 副组长&#xff1a;陈浴森组员&#xff1a;蒋建强、翟帅、谢学致、申世业、潘浩杨、芦泽宇、季淑琦、冯涵婷制作周期&#xff1a;2020年9月25日-…

一文让你秒懂字符编码

字符编码 文字是如何显示的 128 64 32 16 8 4 2 165 0 1 0 0 0 0 0 1 108 0 1 1 0 1 1 0 1 148 0 0 1 1 0 0 0 0二进制 ——》十进制 9 A 1101101 l 1101101 e x 11011011101101 设定为&#xff0c;每8个2进制位代表一个字符 论断句的重要性 8bit 1bytes 字节 &#…

ssl1222-矩形【图论,并查集】

正题 大意 有n个正方形&#xff0c;求块数。 解题思路 用并查集求块数 代码 #include<cstdio> #include<algorithm> using namespace std; int i,lt[7001],x1[7001],y1[7001],x2[7001],y2[7001],n,s; int father(int x) {if (lt[x]!x) lt[x]father(lt[x]);ret…

漫画:什么是桶排序

转载自 漫画&#xff1a;什么是桶排序 计数排序需要根据原始数列的取值范围&#xff0c;创建一个统计数组&#xff0c;用来统计原始数列中每一个可能的整数值所出现的次数。 原始数列中的整数值&#xff0c;和统计数组的下标是一一对应的&#xff0c;以数列的最小值作为偏移…

shiro初步学习

文章目录一、 Shiro 简介二、 *Shiro 架构原理*三、 INI文件介绍四、 Shiro环境搭建及认证实现五、 第一个Shiro演示六、 授权七、 加密及凭证匹配器八、 自定义Realm九、 凭证匹配器一、 Shiro 简介 1 概述 权限体系在现代软件应用中有着非常重要的地位。一个应用如果没有权限…

同理心是通往成功架构的桥梁

一、什么是同理心 同理心&#xff08;Empathy&#xff09;&#xff0c;又叫做换位思考、神入、共情&#xff0c;指站在对方立场设身处地思考的一种方式&#xff0c;即与人际交往过程中&#xff0c;能够体会他人的情绪和想法、理解他人的立场和感受&#xff0c;并站在他人的角度…

星梦小组KTV点歌系统简介

班 级&#xff1a;19级青鸟3班组 名&#xff1a;星梦小组班主任&#xff1a;王欣欣老师指导老师&#xff1a;穆雄雄老师组 长&#xff1a;刘娜 副组长&#xff1a;王宝兴、汪杰小组成员&#xff1a;汪杰、方传森、王宝兴、赵燕涵、云善辉、丁长琨、翟选浩、蔺广兴、王建业、路亚…

漫画:什么是计数排序

转载自 漫画&#xff1a;什么是计数排序 假定20个随机整数的值如下&#xff1a; 9&#xff0c;3&#xff0c;5&#xff0c;4&#xff0c;9&#xff0c;1&#xff0c;2&#xff0c;7&#xff0c;8&#xff0c;1&#xff0c;3&#xff0c;6&#xff0c;5&#xff0c;3&#xf…

Office365开发系列——开发一个全功能的Word Add-In

2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发”48小时黑客马拉松“&#xff0c;我开发的一个Word Add-In Demo——WordTemplateHelper获得了二等奖。在会场有幸结识了陈希章老师&#xff0c;在与陈老师的交流中受益良多&#xff0c;得知陈老师在准备…

秒懂python的深浅copy

dict , list ,set , s {name:alex....} s2 s , 此时s2和s是共享 同一份数据 的&#xff0c;copy一份新数据 , 浅copy, 只copy第一层 s2 s.copy() 深copy s4 copy.deepcopy(s)浅拷贝 深拷贝

SpringBoot整合Shiro实现登录认证和授权CHCache

文章目录一、 springboot实现普通登录1 添加依赖2 编写配置文件3 新建实体类和mapper4 编写业务层代码5 编写控制器6 编写启动类7 编写登录页面和主页面二、 springboot整合shiro实现登录认证和凭证匹配1 添加依赖2 自定义Realm3 编写配置4 userService新增单元方法&#xff1a…

java中如何对对象排序?

大家好&#xff0c;我是雄雄。前言&#xff1a;我们知道&#xff0c;在平时做项目的过程中&#xff0c;我们总会用到各种各样的排序&#xff0c;或是升序&#xff0c;或是降序。在java中&#xff0c;要实现排序有好多中方式&#xff0c;比如我们耳熟能详的冒泡排序、选择排序等…

Java程序员必看的 13 本 Java 书籍

转载自 Java程序员必看的 13 本 Java 书籍 关乎于程序员&#xff0c;除了做项目来提高自身的技术&#xff0c;还有一种提升自己的专业技能就是&#xff1a;多&#xff01;看&#xff01;书&#xff01; 毕竟&#xff0c;书是学习的海洋呢&#xff01;So&#xff0c;Java程序…

祝你生日快乐!

祝生日快乐今天&#xff0c;于我来说是个特别的日子。本来&#xff0c;我是比较低调的&#xff0c;尤其是对于生日来说&#xff0c;可以说是这些年都没有好好的过过&#xff0c;要么忘记了&#xff0c;要么就是在异国他乡的&#xff0c;谁都不识&#xff0c;这一天和往常的一天…

.NET Exceptionless 日志收集框架本地环境搭建

一、简介 Exceptionless 是一个开源的实时的日志收集框架&#xff0c;它可以应用在基于 ASP.NET&#xff0c;ASP.NET Core&#xff0c;Web Api&#xff0c;Web Forms&#xff0c;WPF&#xff0c;Console&#xff0c;MVC 等技术栈的应用程序中&#xff0c;并且提供了Rest接口可以…

java中如何对汉字进行排序?

前言&#xff1a;上一篇文章我们讲解了java中实现Comparator进行排序 和实现Comparable进行排序&#xff0c;我们分别举例根据学号和姓名降序排序&#xff0c;原文在这里&#xff1a;java中如何对对象排序&#xff1f; &#xff0c;不过在文章的最后&#xff0c;我故意留了个问…