• Quartz-定时任务框架


    一、新建.NET Framework 4 控制台应用程序  ConsoleApP40

    二、选择ConsoleApP40 右键 管理NuGet程序包(N)...  输入 Quartz(为了测试方便 请选择 2.5.0 版本)

     添加QuartZ之后还会多出一个文件,job_scheduling_data_2_0.xsd   如图

     第一种方式  硬编码方式设置定时任务

    代码如下:

    1. using Quartz.Impl;
    2. using Quartz;
    3. using System;
    4. using System.Collections.Generic;
    5. using System.Linq;
    6. using System.Text;
    7. using System.Threading.Tasks;
    8. namespace ConsoleApP40
    9. {
    10. internal class Program
    11. {
    12. static void Main(string[] args)
    13. {
    14. #region 第一种方式 硬编码方式设置定时任务
    15. //第一种方式 硬编码方式设置定时任务
    16. 可以通过配置来设置间隔时间
    17. int a = 10;
    18. //IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
    19. //scheduler.Start();
    20. //var job = JobBuilder.Create().Build();
    21. 可以通过配置来设置间隔时间
    22. var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(a).RepeatForever()).StartNow().Build();
    23. //var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(1).RepeatForever()).StartNow().Build();
    24. //scheduler.ScheduleJob(job, trigger);
    25. #endregion
    26. 创建调度器
    27. //ISchedulerFactory factory = new StdSchedulerFactory();
    28. //var scheduler = await factory.GetScheduler();
    29. //await scheduler.Start();
    30. 创建工作
    31. //var job = JobBuilder.Create().WithIdentity("job1", "group1").Build();
    32. 创建触发器,设定触发时间,间隔时间,重复频率
    33. //var trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().WithSimpleSchedule(a => a.WithIntervalInSeconds(5).RepeatForever()).Build();
    34. 工作和触发器挂在调度器
    35. //await scheduler.ScheduleJob(job, trigger);
    36. Console.Read();
    37. }
    38. }
    39. public class HelloJob : IJob
    40. {
    41. private string name = string.Empty;
    42. public void Execute(IJobExecutionContext context)
    43. {
    44. Console.WriteLine("Quartz 任务调度执行----当前时间: {0} ", DateTime.Now);
    45. }
    46. }
    47. ///
    48. /// 工作要处理的内容
    49. ///
    50. //public class Myjob : IJob
    51. //{
    52. // public virtual Task Execute(IJobExecutionContext context)
    53. // {
    54. // return Console.Out.WriteLineAsync($"job工作了,{DateTime.Now}");
    55. // }
    56. //}
    57. }

    测试:

    第二种方式  job的配置文件配置 Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 类来处理这个xml文件,同时指定下quartz_jobs.xml的路径,如下所示:使用quartz_jobs.xml 配置文件来创建相关的定时任务需要的参数,在nuget中获取quartz框架的时候,在解决方案中多了一个xsd文件,这个xsd文件是用来写xml时做代码提示用的.

    代码如下:

    1. using Quartz.Impl;
    2. using Quartz;
    3. using System;
    4. using System.Collections.Generic;
    5. using System.Linq;
    6. using System.Text;
    7. using System.Threading.Tasks;
    8. namespace ConsoleApP40
    9. {
    10. internal class Program
    11. {
    12. static void Main(string[] args)
    13. {
    14. #region 第一种方式 硬编码方式设置定时任务
    15. //第一种方式 硬编码方式设置定时任务
    16. 可以通过配置来设置间隔时间
    17. int a = 10;
    18. //IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
    19. //scheduler.Start();
    20. //var job = JobBuilder.Create().Build();
    21. 可以通过配置来设置间隔时间
    22. var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(a).RepeatForever()).StartNow().Build();
    23. //var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds(1).RepeatForever()).StartNow().Build();
    24. //scheduler.ScheduleJob(job, trigger);
    25. #endregion
    26. #region 第二种方式 job的配置文件配置 Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 类来处理这个xml文件,同时指定下quartz_jobs.xml的路径,如下所示:使用quartz_jobs.xml 配置文件来创建相关的定时任务需要的参数
    27. //job的配置文件配置 Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin 类来处理这个xml文件,同时指定下quartz_jobs.xml的路径,如下所示:使用quartz_jobs.xml 配置文件来创建相关的定时任务需要的参数
    28. var factory = new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection()
    29. {
    30. {"quartz.plugin.xml.fileNames","~/quartz_jobs.xml" },
    31. {"quartz.plugin.xml.type","Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz"}
    32. });
    33. IScheduler scheduler = factory.GetScheduler();
    34. scheduler.Start();
    35. #endregion
    36. 创建调度器
    37. //ISchedulerFactory factory = new StdSchedulerFactory();
    38. //var scheduler = await factory.GetScheduler();
    39. //await scheduler.Start();
    40. 创建工作
    41. //var job = JobBuilder.Create().WithIdentity("job1", "group1").Build();
    42. 创建触发器,设定触发时间,间隔时间,重复频率
    43. //var trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartNow().WithSimpleSchedule(a => a.WithIntervalInSeconds(5).RepeatForever()).Build();
    44. 工作和触发器挂在调度器
    45. //await scheduler.ScheduleJob(job, trigger);
    46. Console.Read();
    47. }
    48. }
    49. public class HelloJob : IJob
    50. {
    51. private string name = string.Empty;
    52. public void Execute(IJobExecutionContext context)
    53. {
    54. Console.WriteLine("Quartz 任务调度执行----当前时间: {0} ", DateTime.Now);
    55. }
    56. }
    57. ///
    58. /// 工作要处理的内容
    59. ///
    60. //public class Myjob : IJob
    61. //{
    62. // public virtual Task Execute(IJobExecutionContext context)
    63. // {
    64. // return Console.Out.WriteLineAsync($"job工作了,{DateTime.Now}");
    65. // }
    66. //}
    67. }

     使用xml配置job和trigger,首先添加quartz_jobs.xml文件,然后选中visual studio中的xml菜单栏,选中“架构”菜单项,如下:

     配置一下 quartz_jobs.xml 复制到输出目录 为 始终复制,生成操作  内容即可

    注意: 在quartz_jobs.xml中 配置的时候,需要设置应用程序的名称以及IJob的实现类

    测试:

    修改quartz_jobs.xml中 10000配置为10,如下

     

  • 相关阅读:
    1759E(方案枚举)
    剑指 Offer 12. 矩阵中的路径
    力扣(LeetCode)218. 天际线问题(2022.08.06)
    oracle savepoint用法
    CONNMIX 开发 WebSocket 视频弹幕
    学习MyBatis过程中遇到的问题
    sprngboot整合kabana
    #案例:演示map函数的使用!和#案例:演示迭代器的使用、生成器函数的使用、生成器表达式的使用!
    js 前端 Function.prototype.call.call(0[‘toString‘], *, 16)
    Kafka源码分析(四) - Server端-请求处理框架
  • 原文地址:https://blog.csdn.net/LongtengGensSupreme/article/details/127754421