ABP后台服务之作业调度Quartz.NET
一、简介
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相关推荐
- Flask从0到1快速后台服务开发
Flask从0到1快速后台服务开发 版本说明: Python:3.7 Flask:1.0.2 前言 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Wer ...
- 【Android】Android中判断后台服务是否正在运行
判断服务是否在运行 在应用中涉及到后台运行服务,而使用解锁事件来重启服务保证服务是一直运行的.但是这种不加判断直接开启服务的方式优点在于快速(不必花费时间判断服务是否运行),缺点是控制的太粗糙:比较合 ...
- Web后台服务开发——数据库查询之引入TypeORM
文章转自 极客论坛 前置条件 首先按照 Web后台服务开发--安装MySQL 和 Web后台服务开发--安装HeidiSQL 安装MySQL: 然后创建一个数据库,假定名称为test,你也可以选择其 ...
- 在CentOS7上部署.net core 控制台应用程序部署为后台服务
在CentOS7上部署.net core 控制台app为后台服务 转载于:https://www.cnblogs.com/wangwust/p/9821547.html
- android 发送前台广播,使用IntentService与BroadcastReceiver实现后台服务(Android7.0可用)...
IntentService的优点 IntentService会创建单独的线程处理所有的Intent请求, 会处理onHandleIntent方法实现的代码, 隐藏开发者无须处理多线程问题, 当所有请求 ...
- xunsearch: 开启后台服务,索引……随笔记录
重启后台服务: cd $prefix ; bin/xs-ctl.sh restart 索引: # 导入 MySQL 数据库的 dbname.tbl_post 表到 demo 项目中,并且平滑重建 ut ...
- 若依微服务版后台服务通过jar包部署到Windows服务器
场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在前 ...
- 【JavaService】部署Java jar为Windows后台服务
将Java jar文件部署为Windows后台服务有多种方法:Service Installer.Java service Wrapper.JavaService.exe等等.这里介绍下使用JavaS ...
- C#实现Windows后台服务实例浅析
2019独角兽企业重金招聘Python工程师标准>>> C#实现Windows后台服务实例之前要明白的一些概念:所谓Windows后台服务,即后台自动运行的程序,一般随操作系统启动而 ...
最新文章
- python计算机二级含金量-计算机二级 Python 怎么考?考什么?
- golang interface 类型转换_无符号Golang程序逆向方法解析
- java 依赖算法_java – Maven 2 – 从传递依赖版本定义依赖版本
- JavaFX maven工程pom文件完整内容
- 保存的图数据丢失_自从用了这2个功能,再也没有担心过文档丢失
- Qt5\MinGw编译器快速解决-QMYSQL driver not loaded问题
- 营销管理手册_麦肯锡内部培训手册,揭秘高效能团队打造的秘密,附6个案例...
- 电竞天才Uzi退役:从网瘾少年到年薪千万,留下最大遗憾
- 唐国庆出任木林森执行总经理,给木林森带来怎样的想象空间?
- java在web里被禁用_JavaWEB_Session被禁用的后果和解决方法
- 康沣生物通过港交所聆讯:持续亏损、现金流紧张,李克俭为董事长
- 【技术干货】详解BGP4+的负载分担
- Markdown排版微信公众号文章
- 机器学习项目入门篇:一个完整的机器学习项目
- 2022微信大数据挑战赛复盘,rank60+菜鸟
- OpenCV中的混合高斯算法原理
- 安装STM32Cubemx-6.0.1报错,需要64位java1.8.0_45 (64-bit)JRE
- 【微信小程序支付功能】uniapp实现微信小程序支付功能
- 掌柜大作战(10):人脸识别和图像识别,Java程序员的宿命
- linux查询tomcat进程并杀死,Linux下tomcat管理查看控制台|杀死tomcat进程
热门文章
- 20多年前我住的平房
- 恒大俱乐部每年亏损数亿,为何马云还不卖掉手中的股份?
- IP数据报格式,IP分片,IP编址,子网掩码
- sql二进制转十进制_了解SQL十进制数据类型
- 在SQL Server中使用SQL Coalesce函数
- aws ec2 选择可用区_在AWS EC2上配置SQL Server Always On可用性组
- 未能找到存储过程sp__sp_WhoIsActive存储过程概述
- docker for windows无法共享硬盘
- javascript 事件冒泡和事件代理
- Hadoop实战之三~ Hello World