tnblog
首页
视频
资源
登录

ABP后台服务之作业调度Quartz.NET

6653人阅读 2022/3/28 17:35 总访问:1595909 评论:0 收藏:0 手机
分类: ABP

一、简介

  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 依赖。

  1. Install-Package Abp.Quartz -Version 1.2.1

如下所示:

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

2. 创建后台作业

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

  1. public class MyLogJob : JobBaseITransientDependency
  2. {    public override void Execute(IJobExecutionContext context)
  3.     {
  4.         Logger.Info("Executed MyLogJob :)");
  5.     }
  6. }

3. 创建调度作业

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

  1.  .WithIdentity("作业名称""作业组")
  1. public ActionResult ScheduleJob()
  2.         {
  3.             //从工厂中获取一个调度器实例化
  4.             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
  5.             scheduler.Start();       //开启调度器
  6.              
  7.             IJobDetail job1 = JobBuilder.Create<MyLogJob>()  //创建一个作业
  8.                 .WithIdentity("MyLogJobIdentity""MyGroup")
  9.                 .WithDescription("A job to simply write logs.")
  10.                 .Build();
  11.             ITrigger trigger1 = TriggerBuilder.Create()
  12.                 //.WithIdentity("触发器名称", "触发器组") //未指定
  13.                 .StartNow()                       
  14.                 .WithSimpleSchedule(x => x
  15.                     .RepeatForever() 
  16.                     .WithIntervalInSeconds(5)
  17.                     )
  18.                 .Build();
  19.             
  20.             scheduler.ScheduleJob(job1, trigger1);      //把作业,触发器加入调度器。
  21.             return Content("OK, scheduled!");
  22.         }

三、深入应用

 1.PostInitialize解析

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

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

  1. public override void PostInitialize()
  2.         {
  3.             var workManager = IocManager.Resolve<IQuartzScheduleJobManager>();
  4.             workManager.ScheduleAsync<MyLogJob>(
  5.                 .....
  6.               );
  7.         }

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

参考:

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


评价

.netcore3.1 ABP+vue 实战 (一)

ABP前言一个应用程序框架和起点的ASP.NET MVC web应用程序与最佳实践和最流行的工具!(它是这样说的)1.项目的创建创建项...

ABP框架的介绍和基用法

一、什么是ABP框架? ABP框架全称为“ASP.NETBoilerplateProject”,中文翻译为“ASP.NET样板项目”,诞生的主要目的就是...

ABP数据库迁移

让我们来了解数据库迁移吧!还坑了我好久哇!一、首先二、出现程序包后按以下步骤做如果没按照以上步骤做的话你输入的是add...

ABP添加菜单(服务端添加菜单项)

一 首先创建好一个项目二、找到Navigation结尾类,在类中找到SetNavigation方法,按照模板中提供的菜单添加方法添加MenuIte...

ABP 框架之Navicat 误删数据库怎么恢复

前言:hello 大家好 我们又见面了 我是小付今天我tmd手贱 不小心把数据库干没了一言难尽啊,话不多说一起来看看吧。上次我...

ABP框架中用插件生成复选框(神坑)

前言:hello ,各位老铁们 五一收假了 也该收心了 今天和小付一起来看看我遇到的问题吧!今天要说的是用插件生成复选框上次...

EF多种更新方法。EF修改,Entity Framework修改。ABP vnext ef 更新封装

[TOC] 方法1:直接执行更新的sql语句过于简单不说了 方法2:先查询在更新Users result = oapEntities.Users.Where(a =&gt...

ABP tatable插件实现页面跳转查询数据

columnDefs:[ { targets:0, data:&quot;identification&quot;, render:function(data){ //此处是跳转页面连接(根指定...

ABP swagger方法重载

代码:services.AddSwaggerGen(c =&gt; { c.ResolveConflictingActions(apiDescriptions =&gt; apiDescriptions.First()); });

ABP项目下载

下载链接:https://aspnetboilerplate.com/Templates版本视情况而定1.2.

ABP 视图生成

一.先在数据库生成一个视图,如下:二.在ABP程序的Core层创建与数据库里视图所对应的实体如下:三.在ABP程序的EntityFrame...

ABP Xml为Swagger接口页添加详细注释

我们选中我们Application层的项目,右键“属性”,勾选为Xml生成文档,如下图所示。在你的 项目名.Web.Host 的startup目录...

ABP 控制台的基本操作

Update-Database -Migration:0 (删除表结构,受用于数据库,它把数据库的表结构删了)drop-database(数据库删除)Remove-...

ABP 自动映射 AutoMapper

转载:https://www.cnblogs.com/sugarwxx/p/13298800.html自动映射有如下几种:AutoMap,AutoMapFrom和AutoMapTo1.AutoMap...

ABP 多租户数据共享

转载于:https://www.cnblogs.com/Martincheng/p/10185430.htmlABP开启多租户,实体继承了IMayHaveTenant或者IMustHaveTena...
没有个性,不需要签名
排名
4
文章
473
粉丝
3
评论
2
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术