一、简介

  Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。

  你能够用它来为执行一个作业而创建简单的或复杂的调度。

它一些很好的特性:

1:支持集群,作业分组,作业远程管理。

2:自定义精细的时间触发器,使用简单,作业和触发分离。

3:数据库支持,可以寄宿Windows服务,WebSite,winform等。

  合适场景:

    间隔时间获取数据,每周固定时间获取数据,每个月的最后一天执行等等

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

  开源地址:https://github.com/quartznet/quartznet

二、ABP后台服务 - 集成Quartz

此部分是abp官方示例解说,地址:https://github.com/ABPFrameWorkGroup/AbpDocument2Chinese/blob/master/Markdown/Abp/7.3ABP后台服务-集成Quartz.md

基础概念

Quartz框架的一些基础概念解释:

  Scheduler     作业调度器。

  IJob             作业接口,继承并实现Execute, 编写执行的具体作业逻辑。

  JobBuilder       根据设置,生成一个详细作业信息(JobDetail)。

  TriggerBuilder   根据规则,生产对应的Trigger

1. 安装

安装Abp.Quartz到你的项目,并对你的模块添加 AbpQuartzModule 依赖。

Install-Package Abp.Quartz -Version 1.2.1

如下所示:

[DependsOn(typeof (AbpQuartzModule))]
public class YourModule : AbpModule
{//...
}

2. 创建后台作业

你也可以实现Quartz的IJob接口来创建一个新的作业,或者派生自JobBase类(定义在Abp.Quartz包中),该类有一些工具属性和方法(例如:日志记录和本地化)。如下所示是一个简单的作业类:

public class MyLogJob : JobBase, ITransientDependency
{public override void Execute(IJobExecutionContext context) { Logger.Info("Executed MyLogJob :)"); } }

3. 创建调度作业

IQuartzScheduleJobManager 接口被用来创建调度作业。你可以在类中注入该接口(或者你可以在你的模块的PostInitialize方法中解析和使用它)来调度作业。某个包含作业调度的控制器示例:

public class HomeController : AbpController
{private readonly IQuartzScheduleJobManager _jobManager; public HomeController(IQuartzScheduleJobManager jobManager) { _jobManager = jobManager; } public async Task<ActionResult> ScheduleJob() { await _jobManager.ScheduleAsync<MyLogJob>( job => { job.WithIdentity("MyLogJobIdentity", "MyGroup")//  .WithIdentity("作业名称", "作业组") .WithDescription("A job to simply write logs."); }, trigger => { trigger.StartNow() .WithSimpleSchedule(schedule => { schedule.RepeatForever() .WithIntervalInSeconds(5) .Build(); }); }); return Content("OK, scheduled!"); } }abp将创建过程进行了轻度的封装,翻译过来源代码大概如下:
 public ActionResult ScheduleJob(){//从工厂中获取一个调度器实例化IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();scheduler.Start();       //开启调度器
             IJobDetail job1 = JobBuilder.Create<MyLogJob>()  //创建一个作业.WithIdentity("MyLogJobIdentity", "MyGroup").WithDescription("A job to simply write logs.").Build();ITrigger trigger1 = TriggerBuilder.Create()//.WithIdentity("触发器名称", "触发器组") //未指定
                .StartNow()                       .WithSimpleSchedule(x => x.RepeatForever() .WithIntervalInSeconds(5)).Build();scheduler.ScheduleJob(job1, trigger1);      //把作业,触发器加入调度器。return Content("OK, scheduled!");}

 

三、深入应用

1.PostInitialize解析

文档中只告诉了我们方法,但是没说怎么做,只能自己摸着石头过河。

在web项目的xxWebModule中做如下修改

 public override void PostInitialize(){var workManager = IocManager.Resolve<IQuartzScheduleJobManager>();workManager.ScheduleAsync<MyLogJob>(.....);}   

参考:

http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html  懒惰的肥兔

http://www.cnblogs.com/tommyli/archive/2009/02/09/1386644.html  李占卫(详细)

http://www.cnblogs.com/jys509/p/4628926.html   Quartz.NET 入门(推荐)

http://www.cnblogs.com/jys509/p/4614975.html   使用Topshelf创建Windows服务

https://www.cnblogs.com/mushroom/p/4067037.html

转载于:https://www.cnblogs.com/xcsn/p/4390574.html

ABP后台服务之作业调度Quartz.NET相关推荐

  1. Flask从0到1快速后台服务开发

    Flask从0到1快速后台服务开发 版本说明: Python:3.7 Flask:1.0.2 前言 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Wer ...

  2. 【Android】Android中判断后台服务是否正在运行

    判断服务是否在运行 在应用中涉及到后台运行服务,而使用解锁事件来重启服务保证服务是一直运行的.但是这种不加判断直接开启服务的方式优点在于快速(不必花费时间判断服务是否运行),缺点是控制的太粗糙:比较合 ...

  3. Web后台服务开发——数据库查询之引入TypeORM

    文章转自 极客论坛 前置条件 首先按照  Web后台服务开发--安装MySQL 和 Web后台服务开发--安装HeidiSQL 安装MySQL: 然后创建一个数据库,假定名称为test,你也可以选择其 ...

  4. 在CentOS7上部署.net core 控制台应用程序部署为后台服务

    在CentOS7上部署.net core 控制台app为后台服务 转载于:https://www.cnblogs.com/wangwust/p/9821547.html

  5. android 发送前台广播,使用IntentService与BroadcastReceiver实现后台服务(Android7.0可用)...

    IntentService的优点 IntentService会创建单独的线程处理所有的Intent请求, 会处理onHandleIntent方法实现的代码, 隐藏开发者无须处理多线程问题, 当所有请求 ...

  6. xunsearch: 开启后台服务,索引……随笔记录

    重启后台服务: cd $prefix ; bin/xs-ctl.sh restart 索引: # 导入 MySQL 数据库的 dbname.tbl_post 表到 demo 项目中,并且平滑重建 ut ...

  7. 若依微服务版后台服务通过jar包部署到Windows服务器

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在前 ...

  8. 【JavaService】部署Java jar为Windows后台服务

    将Java jar文件部署为Windows后台服务有多种方法:Service Installer.Java service Wrapper.JavaService.exe等等.这里介绍下使用JavaS ...

  9. C#实现Windows后台服务实例浅析

    2019独角兽企业重金招聘Python工程师标准>>> C#实现Windows后台服务实例之前要明白的一些概念:所谓Windows后台服务,即后台自动运行的程序,一般随操作系统启动而 ...

最新文章

  1. python计算机二级含金量-计算机二级 Python 怎么考?考什么?
  2. golang interface 类型转换_无符号Golang程序逆向方法解析
  3. java 依赖算法_java – Maven 2 – 从传递依赖版本定义依赖版本
  4. JavaFX maven工程pom文件完整内容
  5. 保存的图数据丢失_自从用了这2个功能,再也没有担心过文档丢失
  6. Qt5\MinGw编译器快速解决-QMYSQL driver not loaded问题
  7. 营销管理手册_麦肯锡内部培训手册,揭秘高效能团队打造的秘密,附6个案例...
  8. 电竞天才Uzi退役:从网瘾少年到年薪千万,留下最大遗憾
  9. 唐国庆出任木林森执行总经理,给木林森带来怎样的想象空间?
  10. java在web里被禁用_JavaWEB_Session被禁用的后果和解决方法
  11. 康沣生物通过港交所聆讯:持续亏损、现金流紧张,李克俭为董事长
  12. 【技术干货】详解BGP4+的负载分担
  13. Markdown排版微信公众号文章
  14. 机器学习项目入门篇:一个完整的机器学习项目
  15. 2022微信大数据挑战赛复盘,rank60+菜鸟
  16. OpenCV中的混合高斯算法原理
  17. 安装STM32Cubemx-6.0.1报错,需要64位java1.8.0_45 (64-bit)JRE
  18. 【微信小程序支付功能】uniapp实现微信小程序支付功能
  19. 掌柜大作战(10):人脸识别和图像识别,Java程序员的宿命
  20. linux查询tomcat进程并杀死,Linux下tomcat管理查看控制台|杀死tomcat进程

热门文章

  1. 20多年前我住的平房
  2. 恒大俱乐部每年亏损数亿,为何马云还不卖掉手中的股份?
  3. IP数据报格式,IP分片,IP编址,子网掩码
  4. sql二进制转十进制_了解SQL十进制数据类型
  5. 在SQL Server中使用SQL Coalesce函数
  6. aws ec2 选择可用区_在AWS EC2上配置SQL Server Always On可用性组
  7. 未能找到存储过程sp__sp_WhoIsActive存储过程概述
  8. docker for windows无法共享硬盘
  9. javascript 事件冒泡和事件代理
  10. Hadoop实战之三~ Hello World