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—基本操作的更多相关文章

  1. quartz.net插件类库封装(含源码)

    1.前言 目录: 1.quartz.net任务调度:源码及使用文档 2.quartz.net插件类库封装 最近项目需要做一写任务作业调度的工作,最终选择了quartz.net这个插件,它提供了巨大的灵 ...

  2. 基于Quartz.net的远程任务管理系统 二

    紧接着上一篇.上一篇讲了表设计与ADO.Net基本操作.接下来,就来说说怎么动态来添加Job任务及清理过期任务吧. 首先,先理一下思路,做事情要先把思绪理清了,然后下手就快准狠了.下面是我的思路:做一 ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(8)、关于ArcGIS Android开发的未来(“Quartz”版Beta)

    1.前言 今天再一次在官网看到了ArcGIS Runtime SDK for Android下一个版本“Quartz”版的更新资料,它将是一个非常重要的更新,包括API接口的重构和开发思路的调整.具体 ...

  4. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  5. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  6. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  7. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)

    很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...

  8. Quartz

    Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. eg: ja ...

  9. Spring Quartz实现任务调度

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

随机推荐

  1. JavaScript substr() 方法

    定义和用法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符. 语法 stringObject.substr(start,length) 参数 描述 start 必需.要 ...

  2. ICEM-蜗壳

    原视频下载地址:https://yunpan.cn/cY8XxpyLN4QaE  访问密码 a792

  3. spark-shell启动错误

    18/06/24 16:41:40 ERROR spark.SparkContext: Error initializing SparkContext.java.net.BindException: ...

  4. 小程序map地图上显示多个marker

    wxml <map id="myMap" style="width: {{mapWidth}}rpx; height: {{mapHeight}}rpx;" ...

  5. 实时查看linux下的日志

    cat /var/log/*.log 如果日志在更新,如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /var/log/message ...

  6. STAR原则

    所谓STAR原则,即Situation(情景).Task(任务).Action(行动)和Result(结果)四个英文单词的首字母组合.STAR原则是结构化面试当中非常重要的一个理论.S指的是situa ...

  7. C++中操作符——学习笔记

    1.箭头操作符 用于指针. 使用容器vector存指针,迭代器是指针需要 解引用后再解引用才是数据.图中漏掉了iter++ 记得要delete 2.算术运算符 %:获得余数. 优先级. 溢出: 除法的 ...

  8. mysql起容器的最精简命令

    亲测有效的 mysql 容器命令: #pull mysql:5.6 docker pull mysql:5.6 #起容器,映射3306端口,配置root用户密码 docker run -di --na ...

  9. Linux 服务器远程管理

    一.Linux 常用远程管理工具 点击下载 二.查看服务器 ip 地址命令 1.通过 ip addr 查看网卡 ip 地址 ip addr 2.通过 ifconfig 查看网卡 ip 地址 最小化安装 ...

  10. mac中matplotlib不支持中文的解决办法

    参考:https://blog.csdn.net/kaizei_pao/article/details/80795377 首先查看matplotlib已加载的字体: import matplotlib ...