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.
如下所示:
[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()
)
.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
ABP后台服务之作业调度Quartz.NET的更多相关文章
- job无法自动运行基于ABP后台服务 - 后台作业和后台工人
原因: 后台作业和后台工人仅在你的应用程序运行的时候才工作.如果web应用长时间没有被请求执行,Asp.Net应用默认是关闭的 解决方案: 应用程序池(Application Pool),Proces ...
- .NET Core 中的通用主机和后台服务
简介 我们在做项目的时候, 往往要处理一些后台的任务. 一般是两种, 一种是不停的运行,比如消息队列的消费者.另一种是定时任务. 在.NET Framework + Windows环境里, 我们一般会 ...
- iPhone Anywehre虚拟定位提示“后台服务未启动,请重新安装应用后使用”的解决方法
问题描述: iPhone越狱了,之后在Cydia中安装Anywhere虚拟定位,但是打开app提示:后台服务未启动,请重新安装应用后使用. 程序无法正常使用... 解决方法: 打开Cydia-已安装, ...
- 带后台服务配置的tomcat使用
tomcat服务启动,将不需要手动启动startup.bat,避免cmd窗口的出现,因为隐藏到后台服务执行: 1,下载. 官网:http://tomcat.apache.org/download-70 ...
- Android 三级联动选择城市+后台服务加载数据库
技术渣,大家将就着看 首先我们需要一个xml数据保存到数据库,这里我从QQ下面找到一个loclist.xml文件 <CountryRegion Name="中国" Code= ...
- highchart访问一次后台服务返回多张图表数据
本文承接上一篇,我们制作动态图表的时候,往往需要的不止一张图表,如果每张图表都与服务接口做一次交互的话未免太过频繁,这无论对前后还是后台都是一种压力,本文介绍一种一次访问返回多组数据的方式来减少前台与 ...
- linux/windows下启用和停止VMware后台服务的脚本
linux/windows下启用和停止VMware后台服务的脚本 linux/windows下启用和停止VMware后台服务的脚本 linux平台 windows平台 本文由乌合之众 lym瞎编,欢迎 ...
- mongodb启动后台服务
将MongoDB部署在服务器机子上时mongodb的实例应为后台服务进行的方式运行,而非前台进程,否则远程会话一关闭mongodb也跟着关闭了.本文介绍mongodb后台服务进程开启和关闭的操作. 开 ...
- 【JavaService】部署Java jar为Windows后台服务
将Java jar文件部署为Windows后台服务有多种方法:Service Installer.Java service Wrapper.JavaService.exe等等.这里介绍下使用JavaS ...
随机推荐
- Mybatis笔记一:写一个demo
什么是Mybatis? 在Java中,我们连接数据库可以使用最初级的JDBC,但是这样很麻烦,每次都要写好多,所以Mybatis出现了,Mybatis可以帮我们很简单很简单的实现与数据库的读取改写操作 ...
- Java中的XML
XML是一种可扩展的标记语言,可扩展就是<>内的东西可以自己定义,可以随便写.标记语言就是加了<>符号的 .HTML是超文本标记语言,不可以拓展,因为你写个<p> ...
- mysql的定时任务
参考博客:https://blog.csdn.net/qq_26562641/article/details/53301407 查看event是否开启: show variables like '%s ...
- SpringBoot系列: Json的序列化和反序列化
============================= 控制 json 序列化/反序列化=============================1. @JsonIgnoreProperties的 ...
- sqlserver2012 offset分页
select ID,UserName from user order by ID OFFSET (10 * (50-1)) ROW FETCH NEXT 10 rows only
- asp.net网页注释
asp.net页面上有一个asp控件,结果 使用<!-- -->注释不起作用,最后发现使用<%-- --%>注释可以.
- HTTP 响应类型 ContentType 对照表
Ø 前言 1. 下面是 HTTP 响应类型 ContentType 的可选值,有备无患先保存一下.摘自:https://wiki.selfhtml.org/wiki/MIME-Type/%C3% ...
- 四、文件IO——内核数据结构和原子操作
4.1 缓存 buff 说明 一般设置缓存 buff 的大小是由一定的规律的,就是根据磁盘块的大小来定. Linux下输入命令: df -k 查看磁盘 可以用命令查看下 /dev/sda1 磁盘的 ...
- 简单SQL语句
一.基础 模式定义了数据如何存储.存储什么样的数据以及数据如何分解等信息,数据库和表都有模式. 主键的值不允许修改,也不允许复用(不能使用已经删除的主键值赋给新数据行的主键). SQL 语句不区分大小 ...
- PHP7语法知识(三):时间与日期、表单、类与对象、正则表达式、错误异常处理、图像处理
时间与日期 一.设置时区 1.在配置文件中设置: 2.通过data_default_timezone_set函数在文件中设置: 二.获取当前时间 三.常用时间处理方法 1.格式化时间显示: 2.计算时 ...