Quartz帮助类
#region 帮助类
public class QuarztHelper
{
#region 字段
/// <summary>
/// 调度器
/// </summary>
IScheduler scheduler; /// <summary>
/// 工作作业
/// </summary>
IJobDetail job; /// <summary>
/// 创建触发器
/// </summary>
ITrigger trigger; /// 身份名称
/// </summary>
string jobKeyName; /// <summary>
/// 分组名称
/// </summary>
string groupName;
#endregion #region 构造函数
public QuarztHelper()
{ } #endregion #region 创建调度器,并打开任务
/// <summary>
/// 创建调度器 并打开任务
/// </summary>
/// <returns></returns>
public async Task CreateScheduler(Form x = null)
{
this.scheduler = await new StdSchedulerFactory().GetScheduler();
if (x != null) //如果没有窗体,则不储存上下文数据
{
this.scheduler.Context.Put("form1", x);
}
await this.scheduler.Start(); } #endregion #region 创建并绑定工作
/// <summary>
/// 1.创建并绑定工作
/// </summary>
/// <typeparam name="T">实现Ijob的类</typeparam>
/// <param name="name">身份key</param>
/// <param name="groupName">分组名称</param>
/// <returns></returns>
public void Definejob<T>(string name, string groupName) where T : IJob
{
//obDataMap jobDataMap = new JobDataMap();
//jobDataMap.Put("TaskName", "Task1");
// .UsingJobData(jobKeyName);储存数据 //StoreDurably 是否持久, 调用ResumeJob 重新执行 this.jobKeyName = name;
this.groupName = groupName;
this.job = JobBuilder.Create<T>()
.WithIdentity(name, groupName)//使用具有给定名称和组的 JobKey 来标识 JobDetail。
.Build();
}
#endregion #region 创建触发器
/// <summary>
/// 2.创建触发器
/// </summary>
/// <param name="triggerName">触发器名称</param>
/// <param name="groupName">分组名称</param>
/// <param name="cron">表达式</param>
/// <param name="name">jobkey名称</param>
public void CreateTigger(string triggerName, string cron)
{
// 创建触发器 触发作业立即运行,然后每秒重复一次
this.trigger = TriggerBuilder.Create()
.WithIdentity(triggerName, this.groupName)
.WithCronSchedule(cron)
.ForJob(this.jobKeyName, this.groupName)
.Build();
}
#endregion #region 关闭任务
/// <summary>
/// 关闭任务
/// </summary>
public void CloseScheduler()
{
this.scheduler.Shutdown();
}
#endregion #region 安排任务
/// <summary>
/// 安排任务
/// </summary>
/// <returns></returns>
public async Task SchedulerTask()
{
await scheduler.ScheduleJob(job, trigger);
}
#endregion #region 作业监听添加到任务调度 /// <summary>
/// 将作业监听其添加到任务调度中去
/// </summary>
/// <typeparam name="T">实现IJobListener接口</typeparam>
public void ListenJob<T>(string jobkeyName, string GroupName) where T : IJobListener, new()
{
IJobListener li = (IJobListener)Activator.CreateInstance(typeof(T), new object[] { jobKeyName });
try
{
this.scheduler.ListenerManager.AddJobListener(li, KeyMatcher<JobKey>.KeyEquals(new JobKey(jobkeyName, GroupName)));
}
catch (Exception ex)
{ throw ex;
} }
#endregion #region 作业监听暂停
/// <summary>
/// 将作业监听暂停
/// </summary>
/// <param name="jobkeyName">监听器名称</param>
/// <returns></returns>
public bool RemoveListen(string jobkeyName)
{
return this.scheduler.ListenerManager.RemoveJobListener(jobkeyName); }
#endregion #region 暂停分组下所有的工作任务 /// <summary>
/// 暂停分组下所有的工作任务
/// </summary>
public void PauseJobs(string groupName)
{
this.scheduler.PauseJobs(GroupMatcher<JobKey>.GroupEquals(groupName));
}
#endregion #region 暂停某个分组下某个任务 /// <summary>
/// 暂停某个分组下某个任务
/// </summary>
public void PauseJob(string jobKeyName, string groupName)
{
this.scheduler.PauseJob(new JobKey(jobKeyName, groupName));
}
#endregion #region 恢复分组下所有的工作任务
/// <summary>
/// 恢复分组下所有的工作任务
/// </summary>
public void ResumeJobs(string groupName)
{
this.scheduler.ResumeJobs(GroupMatcher<JobKey>.GroupEquals(groupName));
}
#endregion #region 恢复分组下某个任务 /// <summary>
/// 恢复分组下某个任务
/// </summary>
public void ResumeJob(string jobKeyName, string groupName)
{
this.scheduler.ResumeJob(new JobKey(jobKeyName, groupName));
}
#endregion #region 删除分组下所有的工作任务
/// <summary>
/// 删除分组下所有的工作任务
/// </summary>
public Task<bool> DeleteJobs(string groupName)
{
var jobKeys = scheduler.GetJobKeys(GroupMatcher<JobKey>.GroupEquals(groupName)).Result;
return this.scheduler.DeleteJobs(jobKeys);
}
#endregion #region 删除某个分组下某个任务
/// <summary>
/// 删除某个分组下某个任务
/// </summary>
public Task<bool> DeleteJob(string jobKeyName, string groupName)
{
return this.scheduler.DeleteJob(new JobKey(jobKeyName, groupName));
} #endregion #region 添加任务
/// <summary>
/// 添加任务
/// </summary>
/// <typeparam name="T">集成Ijob接口</typeparam>
/// <param name="jobkeyName">身份(唯一值)</param>
/// <param name="groupName">分组名称</param>
/// <param name="trigger">"触发器名称"</param>
/// <param name="cron">定时表达式</param>
public async void AddJob<T>(string jobkeyName, string groupName, string trigger, string cron) where T : IJob
{ Definejob<T>(jobkeyName, groupName);
CreateTigger(trigger, cron);
await this.scheduler.AddJob(job, true, true);
await this.scheduler.ScheduleJob(this.trigger);
}
#endregion #region 查看分组下所有的任务名称
public void QueryGroupName(string groupName)
{
var groupMatcher = GroupMatcher<JobKey>.GroupEquals(groupName);
var jobKeys = scheduler.GetJobKeys(groupMatcher);
foreach (var item in jobKeys.Result)
{
Console.WriteLine(item.Name.ToString());//名称
} }
#endregion }
#endregion
Quartz帮助类的更多相关文章
- Quartz管理类
package com.sihuatech.project.task.manager; import java.text.ParseException; import org.quartz.CronT ...
- Quartz公共类,log4net 日志分目录 ,调度任务。
版本:Quartz 2.5 ,log4net 2.0.8 QuartzHelper namespace Job.Common { public class QuartzHelper { private ...
- [C#][Quartz]帮助类
本文来自:http://www.cnblogs.com/pengze0902/p/6128558.html /// <summary> /// 任务处理帮助类 /// </summa ...
- 定时器quartz工具类
一.gradle配置 // https://mvnrepository.com/artifact/org.quartz-scheduler/quartz compile group: 'org.qua ...
- quartz测试类
package demo.mytest; import java.text.ParseException; import org.quartz.CronTrigger;import org.quart ...
- 两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz
1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 import java.util.TimerTask; public class EmailReportT ...
- Quartz:定时任务工具类
Quartz:定时任务工具类 Quartz工具类 Quartz工具类 import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; ...
- Spring任务调度之Quartz
一.Quartz作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.Quart ...
- quartz与spring进行集成
上一篇将了quartz框架的使用,spring同样也提供了对quartz的集成.这次就尝试一下在spring中集成quartz. 要在spring中使用job,Trigger和Scheduler,就要 ...
- Quartz 入门详解
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...
随机推荐
- Codeforces Round #829 (Div. 2) D. Factorial Divisibility(数学)
题目链接 题目大意: \(~~\)给定n个正整数和一个数k,问这n个数的阶乘之和能不能被k的阶乘整除 既:(a\(_{1}\)!+a\(_{2}\)!+a\(_{3}\)!+....+a\(_{n}\ ...
- js/jq 点击按钮显示div,点击页面其他任何地方隐藏div
1.HTML页面 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...
- 安装kali linux(干货)
安装kali 一. 准备工具 1. VMware Workstation Pro https://www.vmware.com/cn/products/workstation-pro/workstat ...
- 深度学习之logistics回归
在开始之前,事先声明本文参考[中文][吴恩达课后编程作业]Course 1 - 神经网络和深度学习 - 第二周作业_何宽的博客-CSDN博客_吴恩达课后编程作业 加上自己的理解,希望可以不用重复看吴恩 ...
- mysql 在连接表中的要点
思路:分析需求,分析字段来自哪些表 (连接查询) 确定使用哪种连接查询? 确定交叉点(这两个表中哪些数据是相同的) 判断条件 such as 学生表中的 ...
- 【数据库】union和union all合并结果操作
一.含义 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的 ...
- 【Java EE】Day09 JavaScript基础
一.JavaScript简介 二.JavaScript语法 三.JavaScript对象
- K8s 超详细总结
一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机:万级容器:相如无亿,K8s有亿 ...
- Qwt开发笔记(二):Qwt基础框架介绍、折线图介绍、折线图Demo以及代码详解
前言 QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并 ...
- requests模块和openpyxl模块
第三方模块的下载和使用 1,第三方模块就是别人大神们已经写好的模块,功能特别强大.我们如果像使用第三方模块就先要进行下载.下载完成后 才可以在python中直接调用 2.下载方式一:pip工具 pip ...