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

一 前言:

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

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

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

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

采用quantz.net+Topshelf  可安装为windows服务。

二 项目结构:

quantz.net基于数据库的任务调度管理(Only.Jobs)_第1张图片

一一介绍下:

Only.Jobs.Items 下是创建的测试Job项目。

Only.Jobs  是一个调度服务项目,集成了Topshelf,可安装成windows服务。

Only.Jobs.Core  是项目的核心层,对外提供数据操作。

Only.Jobs.Web 为调度任务的管理和状态监控管理系统。

先来看下总体效果吧

运行Only.Jobs.Web项目:

quantz.net基于数据库的任务调度管理(Only.Jobs)_第2张图片
quantz.net基于数据库的任务调度管理(Only.Jobs)_第3张图片

在任务管理模块可停止、启用各Job.

三 表结构介绍

quantz.net基于数据库的任务调度管理(Only.Jobs)_第4张图片

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 方法:

//Job状态管控

/public void JobScheduler(IScheduler Scheduler)        

{            

List  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项目

quantz.net基于数据库的任务调度管理(Only.Jobs)_第5张图片
quantz.net基于数据库的任务调度管理(Only.Jobs)_第6张图片

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

代码已上传github

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

你可能感兴趣的:(quantz.net基于数据库的任务调度管理(Only.Jobs))