1. Quratz基本架构

  1. Scheduler基本操作
  1. /// <summary>
  2. /// 调度器信息
  3. /// </summary>
  4. /// <returns></returns>
  5. public async Task<SchedulerMetaData> GetSchedulerI
  6. {
  7. var mate = await schedu.GetMetaData();
  8. var json = JsonConvert.SerializeObject(mate);
  9. return mate;
  10. }
  11.  
  12. /// <summary>
  13. /// 开始schedulequetzthread开始调度
  14. /// </summary>
  15. /// <returns></returns>
  16. public async Task SchedulerStart()
  17. {
  18. if (!schedu.IsStarted)
  19. {
  20. await schedu.Start();
  21. }
  22. }
  23.  
  24. /// <summary>
  25. /// 关闭,关机。并清理关联的资源。
  26. /// </summary>
  27. /// <returns></returns>
  28. public async Task SchedulerShutdown()
  29. {
  30. if (!schedu.IsShutdown)
  31. {
  32. await schedu.Shutdown();
  33. }
  34. }
  35.  
  36. /// <summary>
  37. /// 停止
  38. /// </summary>
  39. /// <returns></returns>
  40. public async Task StopScheduler()
  41. {
  42. if (schedu.IsStarted)
  43. {
  44. await schedu.Standby();
  45. }
  46. }
  47.  
  48. /// <summary>
  49. /// 重启
  50. /// </summary>
  51. /// <returns></returns>
  52. public async Task ResumScheduler()
  53. {
  54. if (schedu.InStandbyMode)
  55. {
  56. //Standby 靠边站的,
  57. await schedu.Start();
  58. }
  59. }

对大容器进行 暂停 重启。整个调度都会停止的。

  1. Job增删查改
  1. public async Task AddJob(string name, string group, string des, string dll, string typename)
  2. {
  3. if (await schedu.CheckExists(new JobKey(name, group)))
  4. {
  5.  
  6. }
  7. else
  8. {
  9. //先建立好一个job项目,然后只用创建一个实现了IJob接口的类库。在把这个类库添加到动态的添加到job项目中。
  10. var dllinstanck = Assembly.LoadFile(dll).CreateInstance(typename);
  11. IJobDetail job = JobBuilder.Create(dllinstanck.GetType()).WithIdentity(name, group).WithDescription(des).StoreDurably(true).Build();
  12. await schedu.AddJob(job, true);
  13.  
  14. }
  15. }
  16.  
  17. public async Task AddOrUpdateJob(string name, string group, string des, string dll, string typename)
  18. {
  19. //StoreDurably 持久化存储
  20. //该工作在孤儿之后是否应该继续存储(没有触发器就是孤儿)
  21. var dllinstanck = Assembly.LoadFile(dll).CreateInstance(typename);
  22. IJobDetail job = JobBuilder.Create(dllinstanck.GetType()).WithIdentity(name, group).WithDescription(des).StoreDurably(true).Build();
  23. await schedu.AddJob(job, true);
  24.  
  25. //var jobde = await schedu.GetJobDetail(new JobKey(name, group));
  26. //jobde.GetJobBuilder().OfType().WithDescription("sdfsdf");
  27.  
  28. }
  29. public async Task DelJob(string name, string group)
  30. {
  31. await schedu.DeleteJob(new JobKey(name, group));
  32. }
  1. public async Task<IList<IJobDetail>> GetJobs()
  2. {
  3. List<IJobDetail> joblist = new List<IJobDetail>();
  4. var keys = await schedu.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
  5. foreach (var item in keys)
  6. {
  7. var job =await schedu.GetJobDetail(item);
  8. joblist.Add(job);
  9. }
  10. return joblist;
  11. }
  1. /// <summary>
  2. /// 停止job就是停止job关联的trigger。
  3. /// job是没有状态的。
  4. ///
  5. /// 播放器 暂停 。在开始将 接着原来的。
  6. ///
  7. /// </summary>
  8. /// <param name="name"></param>
  9. /// <param name="group"></param>
  10. /// <returns></returns>
  11. public async Task SchedulerPauseJob(string name, string group)
  12. {
  13. await schedu.PauseJob(new JobKey(name, group));
  14. }
  15.  
  16. /// <summary>
  17. /// 恢复job 和 pause相对
  18. /// </summary>
  19. /// <param name="name"></param>
  20. /// <param name="group"></param>
  21. /// <returns></returns>
  22. public async Task SchedulerResumeJob(string name, string group)
  23. {
  24. await schedu.ResumeJob(new JobKey(name, group));
  25. }
  1. Trigger增删查改
  1. public async Task AddTrigger(string jobName, string jobGroupName, string triggerName, string triggerGroupName, string cron, string des)
  2. {
  3. var exitTrigger = await schedu.CheckExists(new TriggerKey(triggerName, triggerGroupName));
  4. if (!exitTrigger)
  5. {
  6. if (await schedu.CheckExists(new JobKey(jobName, jobGroupName)))
  7. {
  8. var trigger = TriggerBuilder.Create().WithIdentity(triggerName, triggerGroupName).WithDescription(des).WithCronSchedule(cron).ForJob(jobName, jobGroupName).Build();
  9. await schedu.ScheduleJob(trigger);
  10. }
  11. }
  12. }
  13.  
  14. public async Task<IList<ITrigger>> GetTrrigers()
  15. {
  16. List<ITrigger> triggerList = new List<ITrigger>();
  17. var triggerKeys = await schedu.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
  18. foreach (var item in triggerKeys)
  19. {
  20. var trigger = await schedu.GetTrigger(item);
  21. var job = await schedu.GetJobDetail(trigger.JobKey);
  22. var actionName = job.GetType().FullName;
  23. var nextTime = trigger.GetNextFireTimeUtc();
  24. var preTime = trigger.GetPreviousFireTimeUtc();
  25. var startTime = trigger.StartTimeUtc;
  26. triggerList.Add(trigger);
  27. }
  28. return triggerList;
  29. }
  30.  
  31. public async Task UpdateTrigger(string triggerName, string triggerGroupName, string des)
  32. {
  33. var trigger = await schedu.GetTrigger(new TriggerKey(triggerName, triggerGroupName));
  34. var triggerNew = TriggerBuilder.Create().WithIdentity(triggerName, triggerGroupName).WithDescription(des).ForJob(trigger.JobKey).Build();
  35. await schedu.RescheduleJob(trigger.Key, triggerNew);
  36. }
  1. public async Task PauseTrigger(string name, string group)
  2. {
  3. await schedu.PauseTrigger(new TriggerKey(name, group));
  4. }
  5.  
  6. public async Task ResumeTrigger(string name, string group)
  7. {
  8. await schedu.ResumeTrigger(new TriggerKey(name, group));
  9. }
  10.  
  11. public async Task DelTrigger(string name, string group)
  12. {
  13. await schedu.UnscheduleJob(new TriggerKey(name, group));
  14. }
  1. Calendar增删查改
  1. public async Task AddCalendar(string caName, string triggerKey, string value)
  2. {
  3. var oldCal=await schedu.GetCalendar(caName);
  4. if (oldCal != null)
  5. {
  6. throw new Exception("");
  7. }
  8. else
  9. {
  10. CronCalendar cronCal = new CronCalendar(value);
  11. await schedu.AddCalendar(caName, cronCal,true,true);
  12.  
  13. var oldTrigger=await schedu.GetTrigger(new TriggerKey(triggerKey));
  14. if (oldTrigger != null)
  15. {
  16. var newTrigger= oldTrigger.GetTriggerBuilder().ModifiedByCalendar(caName).Build();
  17. await schedu.RescheduleJob(newTrigger.Key, newTrigger);
  18. }
  19.  
  20. }
  21. }
  22.  
  23. public async Task UpdateCalendar(string caName, string triggerKey, string value)
  24. {
  25. var oldCal = await schedu.GetCalendar(caName);
  26. if (oldCal != null)
  27. {
  28. throw new Exception("");
  29. }
  30. else
  31. {
  32. CronCalendar cronCal = new CronCalendar(value);
  33. // 替换原来老的 自动更新触发器
  34. await schedu.AddCalendar(caName, cronCal, true, true);
  35. }
  36. }
  37.  
  38. public async Task DelCalendar(string caName, string triggerKey)
  39. {
  40. //删除calendar之前 必须先接触trigger和calendar的关系。
  41. var trigger=await schedu.GetTrigger(new TriggerKey(triggerKey));
  42. //一般这里要遍历所有的trigger,
  43. var newTrigger= trigger.GetTriggerBuilder().ModifiedByCalendar(null).Build();
  44. await schedu.RescheduleJob(newTrigger.Key, newTrigger);
  45.  
  46. await schedu.DeleteCalendar(caName);
  47. }
  48.  
  49. public async Task<IList<ICalendar>> GetCalendars()
  50. {
  51. IList<ICalendar> calList = new List<ICalendar>();
  52. var nameList = await schedu.GetCalendarNames();
  53. for (int i = ; i < nameList.Count; i++)
  54. {
  55. var cal= await schedu.GetCalendar(nameList.ElementAt(i));
  56. calList.Add(cal);
  57. }
  58. return calList;
  59. }

动态的排除一些时间

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. MySQL 获得 当前日期时间 函数

    mysql> select now(); 输出 -- :: 例子 mysql> ), now(); +---------------------+----------+---------- ...

  2. STP生成树详解图

  3. 常用的maven仓库地址

    maven 仓库地址: 共有的仓库http://repo1.maven.org/maven2/http://repository.jboss.com/maven2/http://repository. ...

  4. 【转】Python编程: 多个PDF文件合并以及网页上自动下载PDF文件

    1. 多个PDF文件合并1.1 需求描述有时候,我们下载了多个PDF文件, 但希望能把它们合并成一个PDF文件.例如:你下载的数个PDF文件资料或者电子发票,你可以使用python程序合并成一个PDF ...

  5. springlcoud中使用consul作为注册中心

    好久没写博客了,从今天开始重新杨帆起航............................................ springlcoud中使用consul作为注册中心. 我们先对比下注册 ...

  6. Tomcat7/8/8.5三种版本的redis-session-manager的jar和xml配置均不同

    chexagon/redis-session-manager: A tomcat8 session manager providing session replication via persiste ...

  7. ArrayAdapter和ListView

    利用ArrayAdapter向ListView中添加数据 <?xml version="1.0" encoding="utf-8"?> <Li ...

  8. JDBC DataSource

    What is DataSource? 作为 DriverManager 设施的替代项,DataSource 对象是获取连接的首选方法.实现DataSource 接口的对象通常在基于 Java(TM) ...

  9. Linux_CentOS 打包压缩和别名管理

    Linux 打包压缩命令 目前 linux 中打包和压缩的命令很多,最常用的方法有 zip.gzip.bzip2.xz.tar 1.zip 压缩包 1.制作 zip -r public.zip pub ...

  10. Python之BeautifulSoup的使用示例

    import requests from bs4 import BeautifulSoup url = 'http://pm25.in/'+city_pinyin r = requests.get(u ...