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

本文介绍了如何使用Quartz.net结合数据库来管理任务调度。项目包括Web管理、服务运行和数据处理三层,支持MySql和SqlServer。通过Only.Jobs,可以将Job存储在数据库中,并通过ManagerJob类进行调度管理。文章还展示了任务的启停控制、表结构和执行流程,并提供了项目的GitHub链接。
摘要由CSDN通过智能技术生成

原标题:Quartz.net基于数据库的任务调度管理(Only.Jobs)

一 前言:

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

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

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

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

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

二 项目结构:

2423dc0e3d26588db09d946abf94a8cc.png

一一介绍下:

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

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

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

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

先来看下总体效果吧

运行Only.Jobs.Web项目:

b6db24e14c95273df9a33547b238d11c.png

73c61a70e5fd1b0427df18674032abae.png

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

三 表结构介绍

96cb5c541097b5ec03f597762c32d59c.png

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

d99f57a70418ccba641edf94618dc59a.png

b25270a33b415d439c71ec46c8739ee4.png

仅仅是一个工具项目而已,大家可尽管仍砖头过来。代码已上传github https://github.com/mamingbo/Only.Jobs 欢迎下载使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值