zoukankan      html  css  js  c++  java
  • .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.在线演示地址

     

  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/-clouds/p/10947924.html
Copyright © 2011-2022 走看看