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可以用来创建简单或为运行十个,百个, ...
随机推荐
- excel公式与快捷操作
将首行的公式,运用到这一整列 1.选中要输入公式的第一个单元格,SHIFT+CTRL+方向键下,在编辑栏中输入公式,按下CTRL+回车: 2.先输入要填充的公式,按下SHIFT+CTRL+方向键下,再 ...
- JavaWeb3
1. 会话技术 会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间共享数据 方式: 客户端会话技术:Co ...
- 万万没想到,除了香农计划,Python3.11竟还有这么多性能提升!
众所周知,Python 3.11 版本带来了较大的性能提升,但是,它具体在哪些方面上得到了优化呢?除了著名的"香农计划"外,它还包含哪些与性能相关的优化呢?本文将带你一探究竟! 作 ...
- 基于实战的Burp Suite插件使用Tips
基于实战的Burp Suite插件使用技巧 本篇文章首发于奇安信攻防社区 目录 基于实战的Burp Suite插件使用技巧 免责声明: 0×00前言 0×01专业版激活 0×02插件的环境安装 0×0 ...
- JDK动态代理深入剖析
1 基于接口的代理模式 什么是代理? 简单来说,代理是指一个对象代替另一个对象去做某些事情. 例如,对于每个程序员来说,他都有编程的能力: interface Programmable { void ...
- Easy-Classification-验证码识别
1.背景 Easy-Classification是一个应用于分类任务的深度学习框架,它集成了众多成熟的分类神经网络模型,可帮助使用者简单快速的构建分类训练任务. 案例源代码 Easy-Classi ...
- day24 JDBC批处理(通用泛型查询方法 & 下划线转驼峰命名法)
批处理 public static Integer addBatch(String[] sqls){ init(); try { //设置关闭自动提交 conn.setAutoCommit(false ...
- TypeScript 之 控制流分析(Control Flow Analysis)
控制流分析(Control Flow Analysis) 描述: CFA 几乎总是采用联合,基于代码逻辑去减少联合里面的类型数量. 大多数时候,CFA 在自然的JavaScript布尔逻辑中工作,但是 ...
- webShell攻击及防御
最近公司项目也是经常被同行攻击,经过排查,基本定位都是挂马脚本导致,所以针对webShell攻击做一下记录. 首先简单说下 什么是webShell? 利用文件上传,上传了非法可以执行代码到服务器,然后 ...
- 运行typhoon程序的三种方式
cmd直接编写运行:用于较短 临时执行的代码 解释器命令运行:可以编写较长的代码 并且可以长久保存 利用IDE工具编写:IDE开发者工具自动提示 携带各种功能插件 编写代码效率更高更快