.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.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

640?wx_fmt=png

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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ancient Distance(妙啊!!!) [2020牛客暑期多校训练营(第四场)]

Ancient Distance 给定一颗根为111有nnn个节点的树&#xff0c;每次可以选定树上kkk节点当作特殊节点&#xff0c; 定义dis(u)dis(u)dis(u)为&#xff0c;从u−>1u->1u−>1遇上的第一个特殊点的距离&#xff0c;如果遇不上特殊点则dis(u)dis(u)dis(u)无穷大。 有nn…

深入理解 JVM Class文件格式(五)

&#xff08;8&#xff09; CONSTANT_Class_info 常量池中的一个CONSTANT_Class_info&#xff0c; 可以看做是CONSTANT_Class数据类型的一个实例。 他是对类或者接口的符号引用。 它描述的可以是当前类型的信息&#xff0c; 也可以描述对当前类的引用&#xff0c; 还可以描述对…

混沌工程详细介绍——Netflix持续交付实践探寻

内容来源&#xff1a;DevOps案例深度研究 – Netflix的文化与工程实践战队&#xff08;本文只展示部分案例PPT及研究成果&#xff0c;更多细节请关注案例分享活动&#xff0c;及本公众号&#xff09;。本案例内容贡献者&#xff1a;高金梅&#xff0c;李晓莉&#xff0c;潘雄鹰…

P4175 [CTSC2008]网络管理(整体二分)

P4175 [CTSC2008]网络管理 给定一棵有nnn个节点的树&#xff0c;点有点权&#xff0c;有两种操作&#xff1a;① 修改某个点的点权&#xff0c;② 查询两点路径间的点权第kkk大。 给定u,vu, vu,v&#xff0c;选定111号节点为根节点&#xff0c;设inf(x)inf(x)inf(x)表示从根节…

深入理解 JVM Class文件格式(六)

经过前几篇文章&#xff0c; 终于将常量池介绍完了&#xff0c; 之所以花这么大的功夫介绍常量池&#xff0c; 是因为对于理解class文件格式&#xff0c;常量池是必须要了解的&#xff0c; 因为class文件中其他地方&#xff0c;大量引用了常量池中的数据项。 对于还不了解常量池…

远程开发初探 - VS Code Remote Development

如果你是学生&#xff0c;你还在你的 windows 电脑上为各种环境配置头疼的时候&#xff0c;你应该了解一下 Remote Development。如果你喜欢 linux 的开发环境和舒适的 shell&#xff0c;但却不舍得抛弃 windows/macos 图形界面给你带来的用户体验和一些软件的兼容(QQ, 微信), …

深入理解 JVM Class文件格式(七)

本专栏列前面的一系列博客&#xff0c; 对Class文件中的一部分数据项进行了介绍。 本文将会继续介绍class文件中未讲解的信息。 先回顾一下上面一篇文章。 在上一篇博客中&#xff0c; 我们介绍了&#xff1a; this_class 对当前类的描述 super_class 对当前类的超类的描述 in…

P3250 [HNOI2016]网络(整体二分)

P3250 [HNOI2016]网络 给定一棵树&#xff0c;有三种操作&#xff1a; 给定u,v,wu, v, wu,v,w&#xff0c;表示u,vu, vu,v路径上有一个重要度为www的请求&#xff0c;给定ttt&#xff0c;第ttt个发生的请求结束&#xff0c;给定一个xxx&#xff0c;假设xxx发生故障&#xff0…

微信小程序集成腾讯云 IM SDK

1、背景因业务功能需求需要接入IM&#xff08;即时聊天&#xff09;功能&#xff0c;一开始想到的是使用 WebSocket 来实现这个功能&#xff0c;然天意捉弄&#xff08;哈哈&#xff09;服务器版本太低不支持 wx 协议&#xff08;也就不支持 WebSocket了&#xff09;不得不寻找…

深入理解 JVM Class文件格式(八)

在本专栏的第一篇文章 深入理解Java虚拟机到底是什么 中&#xff0c; 我们主要讲解了什么是虚拟机&#xff0c; 这篇博客是对JVM的一个概述。 在随后的几篇文章中&#xff0c;一直在讲解class文件格式。 在今天这篇博客中&#xff0c; 将会继续讲解class文件中的其他信息。 在本…

Function!(计蒜客 - 42386)

Function! fa(x)ax(a>0,a≠1)f_a(x) a ^ x(a > 0, \ a \neq 1)fa​(x)ax(a>0, a​1)&#xff0c;我们要求∑a2n(a∑ban⌊fa−1(b)⌋⌈fb−1(a)⌉)\sum\limits_{a 2} ^{n} \left(a \sum\limits_{b a} ^{n} \lfloor f_a ^{-1}(b) \rfloor \lceil f_b ^{-1}(a) \rce…

深入理解 JVM Class文件格式(九)

经过前八篇关于class文件的博客&#xff0c; 关于class文件格式的内容也基本上讲完了。 本文是关于class文件格式的最后一篇。 在这篇博客中&#xff0c; 将会讲解关于方法的几个属性。 理解这篇博客的内容&#xff0c; 对于理解JVM执行引擎起着重要作用。 关于虚拟机执行引擎有…

MongoDB入门及 c# .netcore客户端MongoDB.Driver2.9.1使用

MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。什么场景下使用MongoDBMongoDB虽然是NoSQL(非关系型的数据库)&#xff0c;但是实际使用的时候可以当做关系型数据库来用&#xff0c;mysql等数据库中单表数据量…

#4604. The kth maximum number(整体二分 + 树套树)

#4604. The kth maximum number 给定一个大小不超过51055 \times 10 ^ 55105的矩形区域&#xff0c;有一些点有点权。 每次询问给定x1,y1,x2,y2,kx_1, y_1, x_2, y_2, kx1​,y1​,x2​,y2​,k问以x1,y1x_1, y_1x1​,y1​为右下角&#xff0c;x2,y2x_2, y_2x2​,y2​为左上角的…

深入理解 JVM Class文件格式(十)

到此&#xff0c; 所有关于class文件格式的重要内容都已经讲解完了&#xff0c; 不敢说面面俱到&#xff0c; 但是敢说大部分重要的内容都包含在内了。前前后后用了9篇博客来专门讲解class文件结构&#xff0c; 为什么花那么多的时间和精力来介绍class文件呢&#xff1f; 简而言…

《WTM送书活动:向更遥远的星辰大海起航~》

点击上方蓝字关注我们吧是的,没错~这一篇不是大老刘写的 哈哈~啥? 你想知道为啥? 大老刘为了你们不加班,熬夜改BUG,姑娘不乐意了...然后...后面请自行脑补~哎~生活还要继续鸭....那么,接下来由我陪大家唠一段儿~ 单口...各位看官老爷们:注意了!第一件事情呢我们的WTM框…

P4602 [CTSC2018]混合果汁(主席树)

P4602 [CTSC2018]混合果汁 共有nnn种果汁&#xff0c;第iii种果汁的美味度为did_idi​&#xff0c;每升价格为pip_ipi​&#xff0c;在一瓶混合果汁中&#xff0c;最多只能添加lil_ili​升。 有mmm个询问&#xff0c;每次询问给出两个数g,Lg, Lg,L&#xff0c;我们要找出价格…

Java中的对象一定在堆上分配吗?

首先&#xff0c;为解释这个问题&#xff0c;需要的基本知识如下&#xff08;如果对以下概念不太熟悉&#xff0c; 可以先了解下&#xff09;&#xff1a; 1.JVM内存结构&#xff0c;传送门 2.即时编译&#xff08;JIT&#xff09;&#xff0c;传送门 3. 逃逸分析&#xff0c;…

最全的 netcore 3.0 升级实战方案

1、哈喽大家中秋节&#xff08;后&#xff09;好呀&#xff01;感觉已经好久没有写文章了&#xff0c;但是也没有偷懒哟&#xff0c;我的视频教程《系列一、NetCore 视频教程&#xff08;Blog.Core&#xff09;》也已经录制八期了&#xff0c;还在每周末同步更新中&#xff0c;…

H - Hello Ms. Ze(树状数组套主席树,线段树上二分)

H - Hello Ms. Ze 给定nnn种不同的材料&#xff0c;第iii种材料有aia_iai​个&#xff0c;有mmm个操作&#xff0c;操作分为两类&#xff1a; 把第xxx种材料修改为yyy个&#xff0c;只用[l,r][l, r][l,r]区间的材料制作衣服&#xff0c;每件衣服要用kkk个不同的材料&#xff…