.Net Core中使用Quartz.Net Vue开即用的UI管理
Quartz.NET
Quartz.Net 定制UI維護(hù)了常用作業(yè)添加、刪除、修改、停止、啟動(dòng)功能,直接使用cron表達(dá)式設(shè)置作業(yè)執(zhí)行間隔,有完整的日志記錄。
Quartz.NET是一個(gè)功能齊全的開(kāi)源作業(yè)調(diào)度系統(tǒng),可用于從最小的應(yīng)用程序到大型企業(yè)系統(tǒng)。
Quartz.NET是一個(gè)用C#編寫(xiě)的純.NET庫(kù),是對(duì)JAVA開(kāi)源調(diào)度框架Quartz的移植。目前支持.Net Core
Quartz.NET官方地址:https://www.quartz-scheduler.net/
?1.Quartz.NetUI 開(kāi)發(fā)環(huán)境
.net core2.1及以上版本、vs2017、Quartz.NET 3.0.7 、 vue 2.0 、IView
?2.開(kāi)箱即用、不依賴數(shù)據(jù)庫(kù)
直接運(yùn)行Quartz.NetUI\Quartz.NET.Web目錄下run.bat文件或部署項(xiàng)目
登陸口令token位于appsettings.json節(jié)點(diǎn)token
管理員帳號(hào)位于appsettings.json節(jié)點(diǎn)superToken
?3.主要代碼文件
QuartzSettings? ? ? ? ? ? ? ? ? ? ? ? 文件夾由系統(tǒng)自動(dòng)生成,與項(xiàng)目文件夾同級(jí),存放作業(yè)配置信息及日志信息(發(fā)布時(shí)不需要發(fā)布或復(fù)制此文件夾)
TaskAuthorizeFilter.cs? ? ? ? ? ? ?帳號(hào)權(quán)限、AllowAnonymous過(guò)濾
QuartzNETExtension.cs? ? ? ? ?處理作業(yè)添加、刪除、修改、停止、啟動(dòng)功能
FileQuartz.cs? ? ? ? ? ? ? ? ? ? ? ? ? 集中處理作業(yè)相關(guān)日志
HttpManager.cs? ? ? ? ? ? ? ? ? ? ? 接口處理
HealthController? ? ? ? ? ? ? ? ? ? ? 對(duì)外開(kāi)放的健康檢查接口,判斷作業(yè)站點(diǎn)是否處理活動(dòng)狀態(tài)。
TaskOptions.cs? ? ? ? ? ? ? ? ? ? ? ?作業(yè)相關(guān)字段
TaskBackGround/Index.cshtml? ? ?作業(yè)UI
task-index.js? ? ? ? ? ? ? ? ? ? ? ? ? ? 前端Vue+IView
4、作業(yè)觸發(fā)器操作 QuartzNETExtension.cs
/// <summary>/// 觸發(fā)新增、刪除、修改、暫停、啟用、立即執(zhí)行事件/// </summary>/// <param name="schedulerFactory"></param>/// <param name="taskName"></param>/// <param name="groupName"></param>/// <param name="action"></param>/// <param name="taskOptions"></param>/// <returns></returns>public?static?async Task<object> TriggerAction(this?ISchedulerFactory schedulerFactory,?string?taskName,?string?groupName, JobAction action, TaskOptions taskOptions =?null){????string?errorMsg =?"";????try????{????????IScheduler scheduler = await schedulerFactory.GetScheduler();????????List<JobKey> jobKeys = scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(groupName)).Result.ToList();????????if?(jobKeys ==?null?|| jobKeys.Count() == 0)????????{????????????errorMsg = $"未找到分組[{groupName}]";????????????return?new?{ status =?false, msg = errorMsg };????????}????????JobKey jobKey = jobKeys.Where(s => scheduler.GetTriggersOfJob(s).Result.Any(x => (x?as?CronTriggerImpl).Name == taskName)).FirstOrDefault();????????if?(jobKey ==?null)????????{????????????errorMsg = $"未找到觸發(fā)器[{taskName}]";????????????return?new?{ status =?false, msg = errorMsg };????????}????????var?triggers = await scheduler.GetTriggersOfJob(jobKey);????????ITrigger trigger = triggers?.Where(x => (x?as?CronTriggerImpl).Name == taskName).FirstOrDefault();????????if?(trigger ==?null)????????{????????????errorMsg = $"未找到觸發(fā)器[{taskName}]";????????????return?new?{ status =?false, msg = errorMsg };????????}????????object?result =?null;????????switch?(action)????????{????????????case?JobAction.刪除:????????????case?JobAction.修改:????????????????await scheduler.PauseTrigger(trigger.Key);????????????????await scheduler.UnscheduleJob(trigger.Key);// 移除觸發(fā)器????????????????await scheduler.DeleteJob(trigger.JobKey);????????????????result = taskOptions.ModifyTaskEntity(schedulerFactory, action);????????????????break;????????????case?JobAction.暫停:????????????case?JobAction.停止:????????????case?JobAction.開(kāi)啟:????????????????result = taskOptions.ModifyTaskEntity(schedulerFactory, action);????????????????if?(action == JobAction.暫停)????????????????{????????????????????await scheduler.PauseTrigger(trigger.Key);????????????????}????????????????else?if?(action == JobAction.開(kāi)啟)????????????????{????????????????????await scheduler.ResumeTrigger(trigger.Key);????????????????????//?? await scheduler.RescheduleJob(trigger.Key, trigger);????????????????}????????????????else????????????????{????????????????????await scheduler.Shutdown();????????????????}????????????????break;????????????case?JobAction.立即執(zhí)行:????????????????await scheduler.TriggerJob(jobKey);????????????????break;????????}????????return?result ???new?{ status =?true, msg = $"作業(yè){action.ToString()}成功"?};????}????catch?(Exception ex)????{????????errorMsg = ex.Message;????????return?new?{ status =?false, msg = ex.Message };????}????finally????{????????FileQuartz.WriteJobAction(action, taskName, groupName, errorMsg);????}}UI
5.在線演示地址
http://132.232.2.109:9950?登陸口令:task123456
GitHub:https://github.com/cq-panda/Quartz.NetUI
原文鏈接:https://www.cnblogs.com/-clouds/p/10947924.html
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總?http://www.csharpkit.com?
總結(jié)
以上是生活随笔為你收集整理的.Net Core中使用Quartz.Net Vue开即用的UI管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ML.NET 示例:搜索引擎结果排名
- 下一篇: 混沌工程详细介绍——Netflix持续交