• 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调度任务管理。

     1     [DisallowConcurrentExecution]
     2     public class ManagerJob : IJob
     3     {
     4         private readonly ILog _logger = LogManager.GetLogger(typeof(ManagerJob));
     5 
     6         public void Execute(IJobExecutionContext context)
     7         {
     8             Version Ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
     9             _logger.InfoFormat("ManagerJob Execute begin Ver." + Ver.ToString());
    10             try
    11             {
    12                 new QuartzManager().JobScheduler(context.Scheduler);
    13                 _logger.InfoFormat("ManagerJob Executing ...");
    14             }
    15             catch (Exception ex)
    16             {
    17                 JobExecutionException e2 = new JobExecutionException(ex);
    18                 e2.RefireImmediately = true;
    19             }
    20             finally
    21             {
    22                 _logger.InfoFormat("ManagerJob Execute end ");
    23             }
    24         }
    25     }
    View Code

    JobScheduler 方法:

     1  /// <summary>
     2         /// Job状态管控
     3         /// </summary>
     4         /// <param name="Scheduler"></param>
     5         public void JobScheduler(IScheduler Scheduler)
     6         {
     7             List<BackgroundJobInfo> list = new BackgroundJobService().GeAllowScheduleJobInfoList();
     8             if (list != null && list.Count > 0)
     9             {
    10                 foreach (BackgroundJobInfo jobInfo in list)
    11                 {
    12                     JobKey jobKey = new JobKey(jobInfo.BackgroundJobId.ToString(), jobInfo.BackgroundJobId.ToString() + "Group");
    13                     if (Scheduler.CheckExists(jobKey) == false)
    14                     {
    15                         if (jobInfo.State == 1 || jobInfo.State == 3)
    16                         {
    17                             ScheduleJob(Scheduler, jobInfo);
    18                             if (Scheduler.CheckExists(jobKey) == false)
    19                             {
    20                                 new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
    21                             }
    22                             else
    23                             {
    24                                 new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 1);
    25                             }
    26                         }
    27                         else if (jobInfo.State == 5)
    28                         {
    29                             new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
    30                         }
    31                     }
    32                     else
    33                     {
    34                         if (jobInfo.State == 5)
    35                         {
    36                             Scheduler.DeleteJob(jobKey);
    37                             new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 0);
    38                         }
    39                         else if (jobInfo.State == 3)
    40                         {
    41                             new BackgroundJobService().UpdateBackgroundJobState(jobInfo.BackgroundJobId, 1);
    42                         }
    43                     }
    44                 }
    45             }
    46         }
    View Code

    其他的简单的就不在这描述了。

    接下来看下运行效果:

    启动Only.Jobs项目

    仅仅是一个工具项目而已,大家可尽管仍砖头过来。

    代码已上传github

    https://github.com/mamingbo/Only.Jobs  欢迎下载使用。

  • 相关阅读:
    汇编实验四
    汇编实验三
    C语言常用标准库函数
    实验一
    NGUI的缓动
    unity之Hashtable ArrayList List
    有关Unity 的一些 笔记之
    有关Unity 的一些 笔记之场景
    有关Unity 的一些 笔记之prefab
    有关Unity 的一些 笔记之消息事件
  • 原文地址:https://www.cnblogs.com/mamingbo/p/7142057.html
Copyright © 2020-2023  润新知