using Quartz.Impl;
using Quartz.Impl.Triggers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Quartz
{
public class QuartzUtil
{
private static ISchedulerFactory sf = null;
private static IScheduler sched = null; static QuartzUtil()
{
sf = new StdSchedulerFactory();
sched = sf.GetScheduler();
sched.Start();
} public static void Init()
{ } /// <summary>
/// 添加Job 并且以定点的形式运行
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="JobName"></param>
/// <param name="CronTime"></param>
/// <param name="jobDataMap"></param>
/// <returns></returns>
public static void AddJob<T>(string JobName, string CronTime, Dictionary<string, object> map) where T : IJob
{
IJobDetail jobCheck = JobBuilder.Create<T>().WithIdentity(JobName, JobName + "_Group").Build();
if (map != null)
{
jobCheck.JobDataMap.PutAll(map);
}
ICronTrigger CronTrigger = new CronTriggerImpl(JobName + "_CronTrigger", JobName + "_TriggerGroup", CronTime);
sched.ScheduleJob(jobCheck, CronTrigger);
} /// <summary>
/// 添加Job 并且以定点的形式运行
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="JobName"></param>
/// <param name="CronTime"></param>
/// <returns></returns>
public static void AddJob<T>(string JobName, string CronTime) where T : IJob
{
AddJob<T>(JobName, CronTime, null);
} /// <summary>
/// 添加Job 并且以周期的形式运行
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="JobName"></param>
/// <param name="StartTime"></param>
/// <param name="EndTime"></param>
/// <param name="SimpleTime">毫秒数</param>
/// <returns></returns>
public static void AddJob<T>(string JobName, DateTimeOffset StartTime, DateTimeOffset EndTime, int SimpleTime) where T : IJob
{
AddJob<T>(JobName, StartTime, EndTime, TimeSpan.FromMilliseconds(SimpleTime));
} /// <summary>
/// 添加Job 并且以周期的形式运行
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="JobName"></param>
/// <param name="StartTime"></param>
/// <param name="EndTime"></param>
/// <param name="SimpleTime"></param>
/// <returns></returns>
public static void AddJob<T>(string JobName, DateTimeOffset StartTime, DateTimeOffset EndTime, TimeSpan SimpleTime) where T : IJob
{
AddJob<T>(JobName, StartTime, EndTime, SimpleTime, new Dictionary<string, object>());
} /// <summary>
/// 添加Job 并且以周期的形式运行
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="JobName"></param>
/// <param name="StartTime"></param>
/// <param name="EndTime"></param>
/// <param name="SimpleTime">毫秒数</param>
/// <param name="jobDataMap"></param>
/// <returns></returns>
public static void AddJob<T>(string JobName, DateTimeOffset StartTime, DateTimeOffset EndTime, int SimpleTime, string MapKey, object MapValue) where T : IJob
{
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add(MapKey, MapValue);
AddJob<T>(JobName, StartTime, EndTime, TimeSpan.FromMilliseconds(SimpleTime), map);
} /// <summary>
/// 添加Job 并且以周期的形式运行
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="JobName"></param>
/// <param name="StartTime"></param>
/// <param name="EndTime"></param>
/// <param name="SimpleTime"></param>
/// <param name="jobDataMap"></param>
/// <returns></returns>
public static void AddJob<T>(string JobName, DateTimeOffset StartTime, DateTimeOffset EndTime, TimeSpan SimpleTime, Dictionary<string, object> map) where T : IJob
{
IJobDetail jobCheck = JobBuilder.Create<T>().WithIdentity(JobName, JobName + "_Group").Build();
jobCheck.JobDataMap.PutAll(map);
ISimpleTrigger triggerCheck = new SimpleTriggerImpl(JobName + "_SimpleTrigger", JobName + "_TriggerGroup",
StartTime,
EndTime,
SimpleTriggerImpl.RepeatIndefinitely,
SimpleTime);
sched.ScheduleJob(jobCheck, triggerCheck);
} /// <summary>
/// 修改触发器时间,需要job名,以及修改结果
/// CronTriggerImpl类型触发器
/// </summary>
public static void UpdateTime(string jobName, string CronTime)
{
TriggerKey TKey = new TriggerKey(jobName + "_CronTrigger", jobName + "_TriggerGroup");
CronTriggerImpl cti = sched.GetTrigger(TKey) as CronTriggerImpl;
cti.CronExpression = new CronExpression(CronTime);
sched.RescheduleJob(TKey, cti);
} /// <summary>
/// 修改触发器时间,需要job名,以及修改结果
/// SimpleTriggerImpl类型触发器
/// </summary>
/// <param name="jobName"></param>
/// <param name="SimpleTime">分钟数</param>
public static void UpdateTime(string jobName, int SimpleTime)
{
UpdateTime(jobName, TimeSpan.FromMinutes(SimpleTime));
} /// <summary>
/// 修改触发器时间,需要job名,以及修改结果
/// SimpleTriggerImpl类型触发器
/// </summary>
public static void UpdateTime(string jobName, TimeSpan SimpleTime)
{
TriggerKey TKey = new TriggerKey(jobName + "_SimpleTrigger", jobName + "_TriggerGroup");
SimpleTriggerImpl sti = sched.GetTrigger(TKey) as SimpleTriggerImpl;
sti.RepeatInterval = SimpleTime;
sched.RescheduleJob(TKey, sti);
} /// <summary>
/// 暂停所有Job
/// 暂停功能Quartz提供有很多,以后可扩充
/// </summary>
public static void PauseAll()
{
sched.PauseAll();
} /// <summary>
/// 恢复所有Job
/// 恢复功能Quartz提供有很多,以后可扩充
/// </summary>
public static void ResumeAll()
{
sched.ResumeAll();
} /// <summary>
/// 删除Job
/// 删除功能Quartz提供有很多,以后可扩充
/// </summary>
/// <param name="JobName"></param>
public static void DeleteJob(string JobName)
{
JobKey jk = new JobKey(JobName, JobName + "_Group");
sched.DeleteJob(jk);
} /// <summary>
/// 卸载定时器
/// </summary>
/// <param name="waitForJobsToComplete">是否等待job执行完成</param>
public static void Shutdown(bool waitForJobsToComplete)
{
if (sched != null)
{
sched.Shutdown(waitForJobsToComplete);
}
} /// <summary>
/// 判断任务是否已经建立
/// </summary>
/// <param name="jobName">任务名</param>
public static bool CheckExist(string jobName)
{
bool isExists = false; TriggerKey triggerKey = new TriggerKey(jobName + "_CronTrigger", jobName + "_TriggerGroup");
isExists = sched.CheckExists(triggerKey); return isExists;
} /// <summary>
/// 判断简单任务是否已经建立
/// </summary>
/// <param name="jobName">任务名</param>
public static bool CheckSimpleExist(string jobName)
{
bool isExists = false; TriggerKey triggerKey = new TriggerKey(jobName + "_SimpleTrigger", jobName + "_TriggerGroup");
isExists = sched.CheckExists(triggerKey); return isExists;
}
}
}

调用方式-----------

QuartzUtil.AddJob<TimerJob>("job1", "0,14,19,37 * * * * ?");

这样就可以了

表达式网站:JSON在线编辑器-奇Q工具网 (qqe2.com)

笔记:C#Quart帮助类 定时器 拿来即用的更多相关文章

  1. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  2. Java基础知识强化之IO流笔记09:File类功能

    详见如下: Android(java)学习笔记87:File类使用

  3. java学习笔记07--日期操作类

    java学习笔记07--日期操作类   一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...

  4. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  5. AJPFX学习笔记JavaAPI之String类

    学习笔记JavaAPI之String类 [size=10.5000pt]一.所属包java.lang.String,没有子类.特点:一旦被初始化就不可以被改变. 创建类对象的两种方式: String ...

  6. 并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理

    在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并 ...

  7. JVM学习笔记-第六章-类文件结构

    JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...

  8. Java开发笔记(九十九)定时器与定时任务

    前面介绍了线程的几种运行方式,不管哪种方式,一旦调用了线程实例的start方法,都会立即启动线程的事务处理.然而某些业务场景在事务执行时间方面有特殊需求,例如期望延迟若干时间之后才开始事务运行,又如期 ...

  9. Directx11学习笔记【七】 游戏定时器的实现

    无论是在动画还是在一些游戏中,定时器总是必不可少的,游戏的帧数动画的播放等都离不开定时器的控制.这里以dx11龙书中提供的定时器为例,具体看看是怎么实现一个简单但精度高使用方便的定时器的. 这个定时器 ...

  10. java学习笔记之日期日历类

    java学习笔记之日期日历 Date日期类概述: 表示特定的瞬间,精确到毫秒 Date类的构造方法: 1.空参数构造方法 Date date = new Date(); 获取到当前操作系统中的时间和日 ...

随机推荐

  1. CSS处理器-Less/Scss

    HTML系列: 人人都懂的HTML基础知识-HTML教程 HTML元素大全(1) HTML元素大全(2)-表单 CSS系列: CSS基础知识筑基 常用CSS样式属性 CSS选择器大全48式 CSS布局 ...

  2. AR空间音频能力,打造沉浸式声音体验

    随着元宇宙的兴起,3D虚拟现实广泛引用,让数字化信息和现实世界融合,目前大家的目光主要聚焦于视觉交互层面,为了在虚拟环境中更好的再现真实世界的三维空间体验,引入听觉层面必不可少,空间音频孕育而生. 空 ...

  3. 1.nginx学习

    我们平时访问的网络网站就是WEB网络服务,允许用户通过浏览器访问互联网中的各种资源服务 WEB服务器会通过HTTP或者HTTPS的方式将请求内容传递给客户端 目前常见的WEB服务有IIS, Nginx ...

  4. css文字垂直展示的方法

    一.使用writing-mode(推荐使用) writing-mode:翻译过来是"写字 - 模式",文本在水平或垂直方向上如何排布 有以下几个属性值: horizontal-tb ...

  5. 7、将字符串数组s2中全部字符复制到字符数组s1中,不用strcpy函数

    /* 将字符串数组s2中全部字符复制到字符数组s1中,不用strcpy函数 */ #include <stdio.h> #include <stdlib.h> void str ...

  6. Excel表格复制填写

    =if(A1<>"",A1,"") #A1可以为任意表格单元

  7. <三>使用类模板实现STL Vector

    使用类模板实现STL Vector,点击查看代码 #include <iostream> using namespace std; template<typename T> c ...

  8. 篇(16)-Asp.Net Core入门实战-权限管理之用户创建与关联角色(ViewModel再用与模型验证二)

    入门实战-权限管理之用户创建与关联角色(ViewModel再用与模型验证二) (1).在用户管理着模块中,相比较菜单功能的代码还是比较多的,设计到用户的创建,修改,角色变更和密码重置,同时都集中在列表 ...

  9. python解释器下载与安装指导手册

    python解释器下载与安装指导手册 1.python解释器 1.1下载地址 1 https://www.python.org/ 1.2.python解释器下载 1.3.python解释器主流版本 p ...

  10. 是时候考虑升级 JDK 17 了

    Spring,作为 Java EE 的事实规范,在2022年11月16日发布了最新的 6.0.0 GA 版本.这个版本是框架后续新生代的初始版本,拥抱持续创新的 OpenJDK 和 Java 生态.新 ...