首页 > 编程语言 >C#中Quartz的使用

C#中Quartz的使用

时间:2023-04-14 14:12:50浏览次数:22  
标签:触发器 Quartz C# 创建 作业 job jobDataMap 使用 JobDataMap

  • 安装 NuGet 包:在 Visual Studio 中打开项目,右键单击项目名称,选择“管理 NuGet 包”,搜索“Quartz”并安装。

  • 创建作业:创建一个实现了 IJob 接口的类,该接口包含一个 Execute 方法,该方法将在作业运行时调用。例如:

    public class MyJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            Console.WriteLine("Hello, world!");
            return Task.CompletedTask;
        }
    }
  • 给Job传递数据:

    // 创建一个JobDataMap对象
    JobDataMap jobDataMap = new JobDataMap();
    
    // 向JobDataMap中添加参数
    jobDataMap.Add("param1", "Hello");
    jobDataMap.Add("param2", "World");
    
    // 创建一个JobDetail对象,设置JobDataMap
    JobDetail jobDetail = JobBuilder.Create<MyJob>()
        .UsingJobData(jobDataMap)
        .Build();
    
    // 在Job类中获取参数
    public class MyJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            JobDataMap jobDataMap = context.JobDetail.JobDataMap;
            string param1 = jobDataMap.GetString("param1");
            string param2 = jobDataMap.GetString("param2");
    
            Console.WriteLine("{0} {1}", param1, param2);
        }
    }

    注意:每次执行job时,都会创建一个新的job对象,并将JobDataMap中的数据传递给它。这意味着,即使您在job中存储了一些状态或数据,它们也不会在下一次执行job时保留。

  • 创建触发器:创建一个触发器来指定何时运行作业。例如,以下触发器将在每天上午 10 点运行作业:

 

ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("trigger1", "group1")
    .WithDailyTimeIntervalSchedule(
        x => x.OnEveryDay()
              .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(10, 0))
    )
    .Build();
    也可以不使用WithDailyTimeIntervalSchedule,使用WithCronSchedule,例如:下面是每天9点触发
.WithCronSchedule(cron) //"0 0 9 * * ?"

 

 

     这个表达式的含义是:

 

    • 第一字段:0,表示秒数为0。
    • 第二字段:0,表示分钟数为0。
    • 第三字段:14,表示小时数为14,即下午2点。
    • 第四字段:*,表示每天都匹配。
    • 第五字段:*,表示每月都匹配。
    • 第六字段:?,表示不指定星期几。
    • 第七字段:未使用。
  • 创建调度器:使用 StdSchedulerFactory 创建调度器,并将作业和触发器添加到调度器中:

ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = await schedulerFactory.GetScheduler();
IJobDetail job = JobBuilder.Create<MyJob>()
    .WithIdentity("job1", "group1")
    .Build();

await scheduler.ScheduleJob(job, trigger);

 

  • 运行作业:调用 Start 方法启动调度器,使作业按照指定的触发器运行:

    await scheduler.Start();

    注意:这里只是启动调度器,并不会立刻执行作业,需要触发器触发才会执行。

 

标签:触发器,Quartz,C#,创建,作业,job,jobDataMap,使用,JobDataMap
From: https://www.cnblogs.com/log9527blog/p/17318118.html

相关文章

  • hexo博客生成报错YAMLException: can not read a block mapping entry
    报错信息:YAMLException:cannotreadablockmappingentry;amultilinekeymaynotb---title:[转]--ISP(图像信号处理)算法概述、工作原理、架构、处理流程date:2020-03-2221:39:40tags:[图像处理]mathjax:true---报错位置是第2行第5位意思是我的date:2020-03-222......
  • Service Mesh是什么,为我们解决了什么问题?
    1、ServiceMesh介绍ServiceMesh翻译为“服务网格”,作为服务间通信的基础设施层。轻量级高性能网络代理,提供安全的、快速的、可靠地服务间通讯,与实际应用部署一起,但对应用透明。应用作为服务的发起方,只需要用最简单的方式将请求发送给本地的服务网格代理,然后网格代理会进行后续的......
  • Service Mesh框架选型对比分析:Linkerd、Envoy、Istio、Conduit
    当前,业界主要有以下主要几种ServiceMesh框架,下面进行详细的说明及对比。1、LinkerdLinkerd是Buoyant公司2016年率先开源的高性能网络代理,是业界的第一款ServiceMesh框架。其主要用于解决分布式环境中服务之间通信面临的一些问题,如网络不可靠、不安全、延迟丢包等问题。Linkerd使......
  • Hexo博客使用valine评论系统无效果及终极解决方案
    注意事项有一些博主valine评论系统无效果,有一些原因:1、很大程度是因为next的版本升级导致某些参数设置不同2、valine评论是基于LeanCloud,还有一个文章阅读次数功能也是用LeanCloud,两者会有一点冲突之后会给出一些解决方案评论系统选择Hexo可用的评论系统有很多,如下:来必力:https://l......
  • 使用maven解决jar冲突
    1.pom部分配置如下<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.1</version><executions>......
  • vue 使用 vue-seamless-scroll 实现LED屏滚动效果
    yarnaddvue-seamless-scroll<divclass="index-roll"><vue-seamless-scroll:data="partnerList":class-option="optionLeft"><ul><liv-for=&quo......
  • mac使用【预览】实现和win一样的【画图】功能
    1,打开预览软件,这个是mac自带的2,截屏3,全选删除截图4,打开工具栏按一下画笔一样的图标把工具栏显示出来就可以随便画了(或者选择菜单:显示-显示标记工具栏)。注意先调整一下画布尺寸,不然可花区域会比较小,然后就可以愉快的花各种图案了可以改颜色,添加字体,等,......
  • 关于CodeSys V3.5 SPX如何使用高版本打包低版本环境静态编译库说明
    之所以需要使用高版本对低版本库进行打包,是因为在实际的使用中发现CodeSysV3.5的低版本虽然支持导入*.compiled-library库,但打包并不方便。以SP5为例,在实际使用过程中发现SP5的文件保存类型不支持.library; 这里在另存时可将文件后缀手动改为.library 在保存为.library后使......
  • switch case语法
    switch(表达式)中表达式的值必须是一下六中类型:byteshortcharint枚举Stringswitchcase中case情况都一样的可以考虑合并switch(表达式){ case常量1: 语句1; break; case常量2: 语句2; break; ... default: break;}......
  • Navicat常见错误怎么处理(Rsa Public Key not Find、Generate First a serial、No All
    一:下载一键提取软件提取码:rtce1.Navicat数据库管理工具:NavicatDBeaver数据库管理工具:可以代替Navicat2.NavicatKeygenPatch:激活工具二:安装激活1.安装Navicat:直接下一步即可安装NavicatKeygenPatch:安装好后即可打开使用2.断网、关闭杀毒软件和本地防火墙3.......