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可以用来创建简单或为运行十个,百个, ...
随机推荐
- VUE2 学习(推荐直接学习VUE3)
概念区分: 前端框架:Vue.AngularJS.React 界面模板:Bootstrap.easyUI.adminlte 学习地址: b站:https://space.bilibili.com/39 ...
- 数据库json字段类型总结
----------------------------------------=================以下是个人自己总结,可能只有自己看的懂.===================---- ...
- 【云原生 · Docker】Docker虚拟化技术
1.Docker入门简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化. 容器是完全使用沙箱 ...
- golang面向对象
一.方法 1.方法是作用在指定的数据类型上,和指定的数据类型绑定,因此自定义类型都可以有方法,而不仅仅是struct: 2.方法的申明和格式调用: package main import ( &quo ...
- 【Devexpress】gridcontorl设置某个特定单元格不可编辑
在gridcontorl中一般情况下我们使用的都是设置一列不可编辑 那么如何设置一个单元格不可编辑呢 在gridView1_ShowingEditor事件中可以实现.这个事件的意思是允许取消激活编辑器 ...
- 关于 python 中比较运算的顺序
先来看一个例子: "x" > "y" == True 结果为 False 因为这里的表达式可以等同于 "x" > "y ...
- 一文带你了解 Spring 的@Enablexxx 注解
layout: post categories: Java title: 一文带你了解 Spring 的@Enablexxx 注解 tagline: by 子悠 tags: - 子悠 前面的文章给大家 ...
- 【collection】1.java容器之HashMap&LinkedHashMap&Hashtable
Map源码剖析 HashMap&LinkedHashMap&Hashtable hashMap默认的阈值是0.75 HashMap put操作 put操作涉及3种结构,普通node节点 ...
- 【每日一题】【dfs重载原始函数&循环/函数结束条件&左右下标在数组中位置的确定】2022年2月7日-NC12 由先序和中序遍历重建二叉树
描述给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建 ...
- 【Shell脚本案例】案例1:服务器系统配置初始化
〇.目录 一.背景 新购买10台服务器,并安装Linux系统 目的:对操作系统进行配置的初始化 二.需求 1.设置时区并同步时间 2.禁用selinux安全机制 3.关闭防火墙(清空防火墙的默认策略, ...