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


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

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

代码已上传github

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容