Quartz.Net—基本操作
Quratz基本架构

Scheduler基本操作
/// <summary>
/// 调度器信息
/// </summary>
/// <returns></returns>
public async Task<SchedulerMetaData> GetSchedulerI
{
var mate = await schedu.GetMetaData();
var json = JsonConvert.SerializeObject(mate);
return mate;
} /// <summary>
/// 开始schedulequetzthread开始调度
/// </summary>
/// <returns></returns>
public async Task SchedulerStart()
{
if (!schedu.IsStarted)
{
await schedu.Start();
}
} /// <summary>
/// 关闭,关机。并清理关联的资源。
/// </summary>
/// <returns></returns>
public async Task SchedulerShutdown()
{
if (!schedu.IsShutdown)
{
await schedu.Shutdown();
}
} /// <summary>
/// 停止
/// </summary>
/// <returns></returns>
public async Task StopScheduler()
{
if (schedu.IsStarted)
{
await schedu.Standby();
}
} /// <summary>
/// 重启
/// </summary>
/// <returns></returns>
public async Task ResumScheduler()
{
if (schedu.InStandbyMode)
{
//Standby 靠边站的,
await schedu.Start();
}
}
对大容器进行 暂停 重启。整个调度都会停止的。
Job增删查改
public async Task AddJob(string name, string group, string des, string dll, string typename)
{
if (await schedu.CheckExists(new JobKey(name, group)))
{ }
else
{
//先建立好一个job项目,然后只用创建一个实现了IJob接口的类库。在把这个类库添加到动态的添加到job项目中。
var dllinstanck = Assembly.LoadFile(dll).CreateInstance(typename);
IJobDetail job = JobBuilder.Create(dllinstanck.GetType()).WithIdentity(name, group).WithDescription(des).StoreDurably(true).Build();
await schedu.AddJob(job, true); }
} public async Task AddOrUpdateJob(string name, string group, string des, string dll, string typename)
{
//StoreDurably 持久化存储
//该工作在孤儿之后是否应该继续存储(没有触发器就是孤儿)
var dllinstanck = Assembly.LoadFile(dll).CreateInstance(typename);
IJobDetail job = JobBuilder.Create(dllinstanck.GetType()).WithIdentity(name, group).WithDescription(des).StoreDurably(true).Build();
await schedu.AddJob(job, true); //var jobde = await schedu.GetJobDetail(new JobKey(name, group));
//jobde.GetJobBuilder().OfType().WithDescription("sdfsdf"); }
public async Task DelJob(string name, string group)
{
await schedu.DeleteJob(new JobKey(name, group));
}
public async Task<IList<IJobDetail>> GetJobs()
{
List<IJobDetail> joblist = new List<IJobDetail>();
var keys = await schedu.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
foreach (var item in keys)
{
var job =await schedu.GetJobDetail(item);
joblist.Add(job);
}
return joblist;
}
/// <summary>
/// 停止job就是停止job关联的trigger。
/// job是没有状态的。
///
/// 播放器 暂停 。在开始将 接着原来的。
///
/// </summary>
/// <param name="name"></param>
/// <param name="group"></param>
/// <returns></returns>
public async Task SchedulerPauseJob(string name, string group)
{
await schedu.PauseJob(new JobKey(name, group));
} /// <summary>
/// 恢复job 和 pause相对
/// </summary>
/// <param name="name"></param>
/// <param name="group"></param>
/// <returns></returns>
public async Task SchedulerResumeJob(string name, string group)
{
await schedu.ResumeJob(new JobKey(name, group));
}
Trigger增删查改
public async Task AddTrigger(string jobName, string jobGroupName, string triggerName, string triggerGroupName, string cron, string des)
{
var exitTrigger = await schedu.CheckExists(new TriggerKey(triggerName, triggerGroupName));
if (!exitTrigger)
{
if (await schedu.CheckExists(new JobKey(jobName, jobGroupName)))
{
var trigger = TriggerBuilder.Create().WithIdentity(triggerName, triggerGroupName).WithDescription(des).WithCronSchedule(cron).ForJob(jobName, jobGroupName).Build();
await schedu.ScheduleJob(trigger);
}
}
} public async Task<IList<ITrigger>> GetTrrigers()
{
List<ITrigger> triggerList = new List<ITrigger>();
var triggerKeys = await schedu.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
foreach (var item in triggerKeys)
{
var trigger = await schedu.GetTrigger(item);
var job = await schedu.GetJobDetail(trigger.JobKey);
var actionName = job.GetType().FullName;
var nextTime = trigger.GetNextFireTimeUtc();
var preTime = trigger.GetPreviousFireTimeUtc();
var startTime = trigger.StartTimeUtc;
triggerList.Add(trigger);
}
return triggerList;
} public async Task UpdateTrigger(string triggerName, string triggerGroupName, string des)
{
var trigger = await schedu.GetTrigger(new TriggerKey(triggerName, triggerGroupName));
var triggerNew = TriggerBuilder.Create().WithIdentity(triggerName, triggerGroupName).WithDescription(des).ForJob(trigger.JobKey).Build();
await schedu.RescheduleJob(trigger.Key, triggerNew);
}
public async Task PauseTrigger(string name, string group)
{
await schedu.PauseTrigger(new TriggerKey(name, group));
} public async Task ResumeTrigger(string name, string group)
{
await schedu.ResumeTrigger(new TriggerKey(name, group));
} public async Task DelTrigger(string name, string group)
{
await schedu.UnscheduleJob(new TriggerKey(name, group));
}
Calendar增删查改
public async Task AddCalendar(string caName, string triggerKey, string value)
{
var oldCal=await schedu.GetCalendar(caName);
if (oldCal != null)
{
throw new Exception("");
}
else
{
CronCalendar cronCal = new CronCalendar(value);
await schedu.AddCalendar(caName, cronCal,true,true); var oldTrigger=await schedu.GetTrigger(new TriggerKey(triggerKey));
if (oldTrigger != null)
{
var newTrigger= oldTrigger.GetTriggerBuilder().ModifiedByCalendar(caName).Build();
await schedu.RescheduleJob(newTrigger.Key, newTrigger);
} }
} public async Task UpdateCalendar(string caName, string triggerKey, string value)
{
var oldCal = await schedu.GetCalendar(caName);
if (oldCal != null)
{
throw new Exception("");
}
else
{
CronCalendar cronCal = new CronCalendar(value);
// 替换原来老的 自动更新触发器
await schedu.AddCalendar(caName, cronCal, true, true);
}
} public async Task DelCalendar(string caName, string triggerKey)
{
//删除calendar之前 必须先接触trigger和calendar的关系。
var trigger=await schedu.GetTrigger(new TriggerKey(triggerKey));
//一般这里要遍历所有的trigger,
var newTrigger= trigger.GetTriggerBuilder().ModifiedByCalendar(null).Build();
await schedu.RescheduleJob(newTrigger.Key, newTrigger); await schedu.DeleteCalendar(caName);
} public async Task<IList<ICalendar>> GetCalendars()
{
IList<ICalendar> calList = new List<ICalendar>();
var nameList = await schedu.GetCalendarNames();
for (int i = ; i < nameList.Count; i++)
{
var cal= await schedu.GetCalendar(nameList.ElementAt(i));
calList.Add(cal);
}
return calList;
}
动态的排除一些时间
Quartz.Net—基本操作的更多相关文章
- quartz.net插件类库封装(含源码)
1.前言 目录: 1.quartz.net任务调度:源码及使用文档 2.quartz.net插件类库封装 最近项目需要做一写任务作业调度的工作,最终选择了quartz.net这个插件,它提供了巨大的灵 ...
- 基于Quartz.net的远程任务管理系统 二
紧接着上一篇.上一篇讲了表设计与ADO.Net基本操作.接下来,就来说说怎么动态来添加Job任务及清理过期任务吧. 首先,先理一下思路,做事情要先把思绪理清了,然后下手就快准狠了.下面是我的思路:做一 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(8)、关于ArcGIS Android开发的未来(“Quartz”版Beta)
1.前言 今天再一次在官网看到了ArcGIS Runtime SDK for Android下一个版本“Quartz”版的更新资料,它将是一个非常重要的更新,包括API接口的重构和开发思路的调整.具体 ...
- Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作
一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- Quartz
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
随机推荐
- ROS里程计
gmapping导航建图包里建图需要里程计信息,且导航也需要. 整个移动机器人的控制结构如下图所示,其中base_controller节点将订阅的cmd_vel信息通过串口或其它通信接口发送给下位机( ...
- Leetcode42. 接雨水
42. 接雨水 做法 考虑单独一列能生产多少贡献:用左右最大值去接这列的水 \(O(n)\) Code class Solution { public: int mx[1000000],rx[1000 ...
- 【转】Python 深入浅出 - PyPDF2 处理 PDF 文件
实际应用中,可能会涉及处理 pdf 文件,PyPDF2 就是这样一个库,使用它可以轻松的处理 pdf 文件,它提供了读,割,合并,文件转换等多种操作. 文档地址:http://pythonhosted ...
- Cesium原理篇:6 Renderer模块(1: Buffer)【转】
https://www.bbsmax.com/A/n2d9P1Q5Dv/ 刚刚结束完地球切片的渲染调度后,打算介绍一下目前大家都很关注的3D Tiles方面的内容,但发现要讲3D Tiles,或者充分 ...
- 字节码(.class)文件的加载过程
类加载 在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的. 类型可以是Class,Interface, 枚举等. Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机 ...
- iftop -i eth0 -B -F
iftop -i eth0 -B -F 108.51.5.220 1 https://www.cnblogs.com/kobexffx/p/11000337.html
- 阿里druid连接池监控数据自定义存储
如何将druid连接池监控到的sql执行效率,连接池资源情况等进行持久化存储,方便系统运维分析优化,以下案例初步测试成功. 第一部: 新建MyDruidStatLogger类实现接口 extends ...
- python3 selenium模块Chrome设置代理ip的实现
python3 selenium模块Chrome设置代理ip的实现 selenium模块Chrome设置代理ip的实现代码: from selenium import webdriver chrome ...
- opencv3.4.6 cmake
Selecting Windows SDK version to target Windows 10.0.16299. Found PythonInterp: N:/Anaconda3/install ...
- Spring cloud微服务安全实战-3-1 API安全 常见的安全机制
不考虑微服务这种复杂的环境下,只是写一个简单的api的时候,如何来保证api的安全. 什么是API