日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2023/12/4 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz.net基于数据库的任务调度管理(Only.Jobs) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一 前言:

各大調(diào)度組件優(yōu)缺點在這就不討論了,使用Quartz.net是因為它可以執(zhí)行秒級任務(wù)。

Only.Jobs 項目通過將各Job存儲在數(shù)據(jù)庫中,啟動一個專門的Job管理任務(wù)來循環(huán)調(diào)度各Job的的調(diào)度情況。

?

項目分為 Web管理系統(tǒng) ?、服務(wù)運行端 ? 、數(shù)據(jù)提供邏輯處理層?

數(shù)據(jù)訪問使用了?SqlSugar?4.1.1.5版本,目前支持MySql、SqlServer

采用Quartz.net+Topshelf ?可安裝為windows服務(wù)。?

二 項目結(jié)構(gòu):

一一介紹下:

Only.Jobs.Items 下是創(chuàng)建的測試Job項目。

Only.Jobs ?是一個調(diào)度服務(wù)項目,集成了Topshelf,可安裝成windows服務(wù)。

Only.Jobs.Core ?是項目的核心層,對外提供數(shù)據(jù)操作。

Only.Jobs.Web 為調(diào)度任務(wù)的管理和狀態(tài)監(jiān)控管理系統(tǒng)。

先來看下總體效果吧

運行Only.Jobs.Web項目:

?

?

在任務(wù)管理模塊可停止、啟用各Job.

?

三 表結(jié)構(gòu)介紹

BackgroundJob ?為任務(wù)信息存儲表

BackgroundJobLog 為任務(wù)執(zhí)行跟蹤日志表?

四 實現(xiàn)介紹

通過任務(wù)管理模塊將開發(fā)好的Job所在的項目配置起來,存儲到BackgroundJob表中。

在Only.Jobs項目中創(chuàng)建ManagerJob 類,Job調(diào)度任務(wù)管理。

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


/// <summary>

? ? ? ? /// Job狀態(tài)管控

? ? ? ? /// </summary>

? ? ? ? /// <param name="Scheduler"></param>

? ? ? ? public void JobScheduler(IScheduler Scheduler)

? ? ? ? {

? ? ? ? ? ? List<BackgroundJobInfo> 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 ?歡迎下載使用。

相關(guān)文章:

  • 基于Quartz.net 的開源任務(wù)管理平臺

  • 使用sqlserver搭建高可用雙機熱備的Quartz集群部署【附源碼】

  • 開源任務(wù)管理平臺TaskManager介紹

原文地址:http://www.cnblogs.com/mamingbo/p/7142057.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的Quartz.net基于数据库的任务调度管理(Only.Jobs)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。