Quartz.NET
Quartz.Net 定制UI维护了常用作业添加、删除、修改、停止、启动功能,直接使用cron表达式设置作业执行间隔,有完整的日志记录。
Quartz.NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统。
Quartz.NET是一个用C#编写的纯.NET库,是对JAVA开源调度框架Quartz的移植。目前支持.Net Core
Quartz.NET官方地址:https://www.quartz-scheduler.net/
1.Quartz.NetUI 开发环境
.net core2.1及以上版本、vs2017、Quartz.NET 3.0.7 、 vue 2.0 、IView
2.开箱即用、不依赖数据库
直接运行Quartz.NetUI\Quartz.NET.Web目录下run.bat文件或部署项目
登陆口令token位于appsettings.json节点token
管理员帐号位于appsettings.json节点superToken
3.主要代码文件
QuartzSettings 文件夹由系统自动生成,与项目文件夹同级,存放作业配置信息及日志信息(发布时不需要发布或复制此文件夹)
TaskAuthorizeFilter.cs 帐号权限、AllowAnonymous过滤
QuartzNETExtension.cs 处理作业添加、删除、修改、停止、启动功能
FileQuartz.cs 集中处理作业相关日志
HttpManager.cs 接口处理
HealthController 对外开放的健康检查接口,判断作业站点是否处理活动状态。
TaskOptions.cs 作业相关字段
TaskBackGround/Index.cshtml 作业UI
task-index.js 前端Vue+IView
4、作业触发器操作 QuartzNETExtension.cs
/// <summary>/// 触发新增、删除、修改、暂停、启用、立即执行事件/// </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 = $"未找到触发器[{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 = $"未找到触发器[{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);// 移除触发器 await scheduler.DeleteJob(trigger.JobKey); result = taskOptions.ModifyTaskEntity(schedulerFactory, action); break; case JobAction.暂停: case JobAction.停止: case JobAction.开启: result = taskOptions.ModifyTaskEntity(schedulerFactory, action); if (action == JobAction.暂停) { await scheduler.PauseTrigger(trigger.Key); } else if (action == JobAction.开启) { await scheduler.ResumeTrigger(trigger.Key); // await scheduler.RescheduleJob(trigger.Key, trigger); } else { await scheduler.Shutdown(); } break; case JobAction.立即执行: await scheduler.TriggerJob(jobKey); break; } return result ?? new { status = true, msg = $"作业{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社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com