Quartz.Net介绍及与.Net Core简单集成

作者 the7
发布于 2020年02月05日
最后更新 2020年03月26日
评论 0
浏览 355

Quartz.Net 是一个功能丰富、开源的作业调度系统,是著名JAVA开源项目Quartz在.Net中的实现,用于管理平常项目中常见的定时邮件、定时采集、定时通知等功能的一个作业调度框架。

Quartz.Net官网: https://www.quartz-scheduler.net/

Cron表达式在线生成: http://cron.qqe2.com/

Quartz三大对象

  • IScheduler 单元 ,一个调度单元,在此上配置任务
  • IJobDetail 作业,即具体做什么事情
  • ITrigger 策略,即怎样执行作业

.Net Core集成Quartz

了解了Quartz.Net三大对象后,集成也就变得简单了,大致分五个步骤。

  • 第一步 nuget安装

    Install-Package Quartz
    
  • 第二步 创建调度单元

    var factory = new StdSchedulerFactory();
    var scheduler = await factory.GetScheduler();
    
  • 第三步 指定具体作业

    首先创建类SendEmailJob继承自IJob,然后使用JobBuilder进行绑定并创建IJobDetail

    var jobDetail = JobBuilder.Create<SendEmailJob>()
      .WithIdentify("sendEmailJob","group1")
      .WithDescription("发送邮件作业")
      .Build();
    
  • 第四步 创建任务策略

    var trigger = TriggerBuilder.Create()
      .WithIdentify("sendEmailTrigger","group1")
      .WithCronSchedule("5/5 * * * * ?")
      .WithDescription("发送邮件策略")
      .Build();
    
  • 第五步 开启任务

    将三大对象进行绑定,然后开启任务。

    await scheduler.ScheduleJob(jobDetail,trigger);
    await scheduler.Start();
    

初始化配置

NameValueCollection props = new NameValueCollection
{
    { "quartz.serializer.type", "binary" },
    { "quartz.scheduler.instanceName", "MyScheduler" },
    { "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" },
    { "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" },
    { "quartz.jobStore.tablePrefix", "QRTZ_" },
    { "quartz.jobStore.dataSource", "myDS" },
    { "quartz.dataSource.myDS.connectionString", "Data Source=EDG2GYKVF8G5P6Z;Initial Catalog=Quartz;User ID=sa;Password=password;" },
    { "quartz.dataSource.myDS.provider", "SqlServer" },
    { "quartz.threadPool.threadCount", "3" },
    { "quartz.scheduler.instanceId", "AUTO" },
    { "quartz.jobStore.clustered", "true" },
};

数据传递

所谓数据传递,是将数据传递进具体Job中,我们可以利用IJobDetailITriggerJobDataMap属性进行传值、类似MVC中的ViewData

在Job中取值

public async Task Execute(IJobExecuteContext)
{
   ...
   var jobData = context.JobDetail.JobDataMap;
   var triggerData = context.Trigger.JobDataMap;
   
   var vaule = jobData.Get("key");
   var value1 = triggerData.Get("key");
   ...
}

注意

  • context.MergedJobDataMap 如果多个key,会去重,以后者为准。
  • key区分大小写
  • 保留执行结果,使用JobDataMap.Put方法。同时Job上打上
    [PersistJobDataAfterExecution] 标签

小提示

  • Quartz.Net移植自Java,所以很多api其实与java中是类似的,遇到问题时,也可以看看java社区的帖子和问题,可能会受到一些启发。

  • Quartz.Net可用于.Net Core

  • Quartz.Net在IIS上,可能会被回收,导致作业调度失效。

  • JobBuilder每次都创建新的Job实例。

  • [DisallowConcurrentExecution],Job打上此标签,从字面翻译是:不允许并发调度执行,表示一个Job未执行完成时,后续的调度都先等待。

0条评论

请先登录后发表评论
提交评论
标签云
css (1) less calc (1) C# (4) C#进制转换 (1) asp.net core (8) Authentication (1) 注销 (1) 登录 (1) 验证 (1) scroll-view (1) 微信小程序 (4) 滚动到底部 (1) StackExchange.Redis (1) google (1) 百度 (1) nginx (2) 大文件 (2) 微信小程序c#解密 (1) 微信小程序获取手机号 (1) openid (1) session_key (1) CDN (1) URL鉴权 (1) 阿里云 (1) async (1) await (1) 禁止下拉上滑效果 (1) Index类型 (1) Range类型 (1) dontent publish (1) dotnet publish在线生成器 (1) System.DrawingCore.GDIPlus报错 (1) centos (1) 中文字体 (1) SqlBulkCopy (1) SqlSugar (1) JWT (5) 认证 (3) RSA JWT (1) 非对称加密 (1) 写信 (1) 见字如面 (1) 优化建议 (2) 正确操作字符串 (1) Java (1) JWT退出 (1) RefreshToken (1) .NET Core网站开发框架 (1) Moz (3) 墨子 (1) JSON.NET (1) Newtonsoft (1) System.Text.Json (1) 自定义后台路径 (1) .netcore (1) quartz (2) 作业调度框架 (1) 作业调度 (1) 定时任务 (1) exception (1) 异常处理 (1) HttpClient (1) IHttpClientFactory (1) RDM (1) Redis (1) Redis Desktop Manager (1) RedisDesktopManager (1) linux (1) mac (1) windows (1) Could not get any response (1) postman (1) leetcode (2) 力扣 (1) 回文字符串 (1) 面试刷题 (1) centos7 (1) php安装 (1) 网易云插件 (1) 马甲App (1) Discuz插件 (1) 网易云音乐 (1) Blazor (1) 五子棋 (1) c#解题 (1) 最长连续序列 (1) Swagger (1) 在线文档 (1) blob (1) mp4 (1) 视频 (1) big file (1) 上传 (1) s (1) Azure (1) Azure Key Vault (1) Configuration (1) 密钥保管库 (1) Dapper安装 (1) Dapper是什么 (1) Dapper连接Mysql (1) Dapper连接SqlServer (1) dapper (1)