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实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
随机推荐
- Pytest权威教程17-安装和使用插件
目录 安装和使用插件 在测试模块或conftest文件中要求/加载插件 找出哪些插件是可用的 按名称取消/取消注册插件 返回: Pytest权威教程 安装和使用插件 本节讨论如何安装和使用第三方插件. ...
- 大数据技术之kettle(1)——安装
一. kettle概述 1.kettle是一款开源的ETL工具,纯java编写,可以在Windows.Linux.Unix上运行,绿色无需安装,数据抽取高效稳定. 2.kettle的两种设计 简述: ...
- 树莓派PWM
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(26, GPIO.OUT) p = GPIO.PWM(26, ...
- make 实例 二 V56
######################################################################### # # Makefile used for buil ...
- C# ffmpeg 视频处理
ffmpeg的官网:https://ffmpeg.org/ ffmpeg是一个强大的视频处理软件(控制台程序),可以通过C# 调用ffmpeg,并传入指令参数,即可实现视频的编辑. /// <s ...
- include mime.types;
include mime.types; (index):1 Resource interpreted as Stylesheet but transferred with MIME type appl ...
- IM 简介
LayIM - 打造属于你自己的网页聊天系统http://layim.layui.com/ 瓜子IM智能客服系统的数据架构设计(整理自现场演讲) - 知乎https://zhuanlan.zhihu. ...
- (E2E_L2)GOMfcTemplate在vs2017上的运行并融合Dnn模块
GOMfcTemplate一直运行在VS2012上运行的,并且开发出来了多个产品.在技术不断发展的过程中,出现了一些新的矛盾:1.由于需要使用DNN模块,而这个模块到了4.0以上的OpenCV才支持的 ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战
笔记 4.Redis工具类封装讲解和实战 简介:高效开发方式 Redis工具类封装讲解和实战 1.常用客户端 https://redisdesktop.com/download ...
- AS的常见问题
版本问题 a.Gradle的版本 用于将代码和资源打包生成apk的编译脚本.此版本号究竟是啥得去studio的安装目录下查看b.Gradle插件的版本 com.android.tools.build: ...