• .Net Core中使用Quartz.Net Vue开即用的UI管理


     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.NetUIQuartz.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.在线演示地址

     

  • 相关阅读:
    旋转变换(一)旋转矩阵
    DICOM中几个判断图像方向的tag
    RGB与HSB之间的转换公式
    Delphi图像处理 -- RGB与HSL转换
    指针类型(C# 编程指南)
    关于 Delphi 中流的使用(2) 用 TFileStream(文件流) 读写
    [转载]Delphi Tokyo 10.2.3发布了
    如果设置网络优先级
    .gitignore详解
    Win10 兼容性 Visual studio web应用程序 ASP.NET 4.0 尚未在 Web 服务器上注册
  • 原文地址:https://www.cnblogs.com/-clouds/p/10947924.html
Copyright © 2020-2023  润新知