首页 > 代码库 > quantz.net基于数据库的任务调度管理(Only.Jobs)

quantz.net基于数据库的任务调度管理(Only.Jobs)

一 前言:

各大调度组件优缺点在这就不讨论了,使用quantz.net是因为它可以执行秒级任务。

Only.Jobs 项目通过将各Job存储在数据库中,启动一个专门的Job管理任务来循环调度各Job的的调度情况。

 

项目分为 Web管理系统  、服务运行端   、数据提供逻辑处理层 

数据访问使用了 SqlSugar 4.1.1.5版本,目前支持MySql、SqlServer

采用quantz.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             try11             {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             finally21             {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                             else23                             {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                     else33                     {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  欢迎下载使用。

 

quantz.net基于数据库的任务调度管理(Only.Jobs)