罗田县升平网络工作室,一家专业从事网站建设的工作室

资讯论坛

 找回密码
 加入论坛

快捷登录

回帖中禁止出现的内容,违者将被直接永久禁止访问,删除ID处理 :1.违反法律法规 ,包括但不限于出现带有政治、色情、暴恐信息等内容;2.恶意攻击内容,包括但不限于:恶意攻击党和政府、辱骂跟帖者、攻击主题发布者、不服从论坛管理、挑衅管理者、挑战版规等;3.广告、推广内容,尤其出现带有病毒、恶意代码、广告链接等内容,包括但不限于:QQ号、文字QQ号、微信号、手机号、文字手机号、第三方网址、单位公司名称、网站名称等;4.回帖贴出该主题隐藏资源链接或其它主题隐藏资源链接的行为。
查看: 475|回复: 0

Quartz.NET的具体使用

[复制链接]

647

主题

598

帖子

702

积分

社区达人

积分
702
发表于 2021-9-27 15:06:13 | 显示全部楼层 |阅读模式
目录


  • 一、什么是Quartz.NET?
  • 二、Quartz.NET可以做什么?
  • 三、ASP.NET Core如何使用Quartz.NET?
  • 四、Quartz的cron表达式

一、什么是Quartz.NET?

Quartz.NET 是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统。
Quartz.NET是纯净的,它是一个.Net程序集,是非常流行的Java作业调度系统Quartz的C#实现。

二、Quartz.NET可以做什么?

Quartz.NET很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。
Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。
Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。
我此次选择Quartz.Net使用的版本是 3.3.3
这里强调一点:3.x的版本与2.x的版本使用方式有一定的差别
Quartz.NET官方文档:https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html

三、ASP.NET Core如何使用Quartz.NET?

首先我们需要创建一个ASP.NET Core web的项目,创建的过程就不展示了,我创建的是API项目,使用传统三层架构。



项目创建好后,我们需要在NuGet包管理器中安装Quartz.AspNetCore和Quartz.Extensions.DependencyInjection






与2.x的使用方式不同,因为我使用的版本是3.3.3(此时最新版本)。我们就不像传统的创建调度中心类。传统的是定义作业工厂类【ResetJobFactory】,控制中心类【SchedulerCenter】,以及定期工作类【RegularWork】(如下图)在这就不过多介绍了。


只需创建一个定期工作类【RegularWork】,并且继承Quartz.net的IJob接口,I_RegularWork_BLL能注入到RegularWork内需要UseMicrosoftDependencyInjectionJobFactory.
  1. public class RegularWork : IJob    {    private readonly I_RegularWork_BLL I_bll;    public RegularWork(I_RegularWork_BLL Ibll)    {        I_bll = Ibll;    }     public Task Execute(IJobExecutionContext context)    {        Input_RoomType model = new Input_RoomType();        model.currentPage = 1;        model.pageSize = 1;        var result = I_bll.getRoomTypeList(model);         return Task.Run(() =>        {            using (StreamWriter sw = new StreamWriter(@"F:/Quartz-NET.txt", true, Encoding.UTF8))            {               sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff =>") + JsonConvert.SerializeObject(result));            }        });    }}
复制代码
在Startup.cs的ConfigureServices方法内通过services去注册RegularWork
  1. //Quartz的工作单元 services.AddTransient<RegularWork>();
复制代码
ConfigureServices方法内新增Quartz调度中心。Quartz.Extensions.DependencyInjection提供与Microsoft 依赖注入的集成,虽然Quartz 为作业工厂提供了两个内置替代方案,可以通过调用UseMicrosoftDependencyInjectionJobFactory或UseMicrosoftDependencyInjectionScopedJobFactory(已弃用)进行配置。
从 Quartz.NET 3.3.2 开始,默认作业工厂生成的所有作业都是作用域作业,不应再使用UseMicrosoftDependencyInjectionScopedJobFactory。
AddJob-新增一个工作单元;StartNow表示作业现在就开始执行;
WithInterval用于执行时间策略执行规则;
TimeSpan.FromSeconds表示执行的时间间隔,秒为单位;RepeatForever代表重复工作,可以用WithRepeatCount(5)代替RepeatForever;WithRepeatCount(5)代表执行5次
  1. //Quartz调度中心    services.AddQuartz(q =>    {        //用于注入        q.UseMicrosoftDependencyInjectionJobFactory();        // 基本Quartz调度器、作业和触发器配置        var jobKey = new JobKey("RegularWork", "regularWorkGroup");        q.AddJob<RegularWork>(jobKey, j => j            .WithDescription("My regular work")        );        q.AddTrigger(t => t            .WithIdentity("Trigger")            .ForJob(jobKey)            .StartNow()            .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(10))//开始秒数 10s            .RepeatForever())//持续工作            .WithDescription("My regular work trigger")        );});
复制代码
ConfigureServices方法内新增添加Quartz服务
  1. // ASP.NET核心托管-添加Quartz服务器 services.AddQuartzServer(options => {     // 关闭时,我们希望作业正常完成     options.WaitForJobsToComplete = false; });
复制代码
完整代码
  1. //Quartz的工作单元    services.AddTransient();    //Quartz调度中心    services.AddQuartz(q =>    {        //用于注入        q.UseMicrosoftDependencyInjectionJobFactory();        // 基本Quartz调度器、作业和触发器配置        var jobKey = new JobKey("RegularWork", "regularWorkGroup");        q.AddJob(jobKey, j => j            .WithDescription("My regular work")        );        q.AddTrigger(t => t            .WithIdentity("Trigger")            .ForJob(jobKey)            .StartNow()            .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(10))//开始秒数 10s            .WithRepeatCount(5))//持续工作            .WithDescription("My regular work trigger")        );});// ASP.NET核心托管-添加Quartz服务services.AddQuartzServer(options =>{    // 关闭时,我们希望作业正常完成    options.WaitForJobsToComplete = false;});
复制代码


这时候我们启动项目,定期工作开始执行。这时候的注入是有效的,查询数据后结果打印在F盘下的Quartz-NET.txt文件内(如下图)。



四、Quartz的cron表达式

官方的文档介绍:https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html
由7段构成:秒 分 时 日 月 星期 年(可选)
"-" :表示范围 MON-WED表示星期一到星期三
"," :表示列举 MON,WEB表示星期一和星期三
"*" :表是“每”,每月,每天,每周,每年等
"/" :表示增量:0/15(处于分钟段里面) 每15分钟,在0分以后开始,3/20 每20分钟,从3分钟以后开始
"&#63;" :只能出现在日,星期段里面,表示不指定具体的值
"L" :只能出现在日,星期段里面,是Last的缩写,一个月的最后一天,一个星期的最后一天(星期六)
"W" :表示工作日,距离给定值最近的工作日
"#" :表示一个月的第几个星期几,例如:"6#3"表示每个月的第三个星期五(1=SUN...6=FRI,7=SAT)
            Expression            Meaning                                    0 0 12 * * &#63;            每天中午12点触发                            0 15 10 &#63; * *            每天上午10:15触发                            0 15 10 * * &#63;            每天上午10:15触发                            0 15 10 * * &#63; *            每天上午10:15触发                            0 15 10 * * &#63; 2005            2005年的每天上午10:15触发                            0 * 14 * * &#63;            在每天下午2点到下午2:59期间的每1分钟触发                            0 0/5 14 * * &#63;            在每天下午2点到下午2:55期间的每5分钟触发                            0 0/5 14,18 * * &#63;            在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发                            0 0-5 14 * * &#63;            在每天下午2点到下午2:05期间的每1分钟触发                            0 10,44 14 &#63; 3 WED            每年三月的星期三的下午2:10和2:44触发                            0 15 10 &#63; * MON-FRI            周一至周五的上午10:15触发                            0 15 10 15 * &#63;            每月15日上午10:15触发                            0 15 10 L * &#63;            每月最后一日的上午10:15触发                            0 15 10 L-2 * &#63;            Fire at 10:15am on the 2nd-to-last last day of every month                            0 15 10 &#63; * 6L            每月的最后一个星期五上午10:15触发                            0 15 10 &#63; * 6L            Fire at 10:15am on the last Friday of every month                            0 15 10 &#63; * 6L 2002-2005            2002年至2005年的每月的最后一个星期五上午10:15触发                            0 15 10 &#63; * 6#3            每月的第三个星期五上午10:15触发                            0 0 12 1/5 * &#63;            Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.                            0 11 11 11 11 &#63;            Fire every November 11th at 11:11am.        
到此这篇关于Quartz.NET的具体使用的文章就介绍到这了,更多相关Quartz.NET使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:http://www.jb51.net/article/219426.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
打赏鼓励一下!
回复

使用道具 举报

回帖中禁止出现的内容,违者将被直接永久禁止访问,删除ID处理 :1.违反法律法规 ,包括但不限于出现带有政治、色情、暴恐信息等内容;2.恶意攻击内容,包括但不限于:恶意攻击党和政府、辱骂跟帖者、攻击主题发布者、不服从论坛管理、挑衅管理者、挑战版规等;3.广告、推广内容,尤其出现带有病毒、恶意代码、广告链接等内容,包括但不限于:QQ号、文字QQ号、微信号、手机号、文字手机号、第三方网址、单位公司名称、网站名称等;4.回帖贴出该主题隐藏资源链接或其它主题隐藏资源链接的行为。

浏览排行

(38463)2019-11-5 公共云钱包资金盘骗局揭秘: 网络传销+原始股骗局合体!

(22233)2019-12-20 12月17日 邓智天法院直播庭审疑问全解答!

(20722)2019-12-1 环保币GEC资金盘骗局最新消息: 即将崩盘!

(17244)2019-11-9 巨胸肥臀大长腿,嫩模糯美子真人COS不知火舞福利污图

(15868)2018-12-24 罗田县人民法院公布【第五批失信被执行人名单】 ...

(14972)2019-11-3 曝光!PTFX已经崩盘跑路,投资者血流成河!

(13018)2019-8-7 湖北电力网上缴费,支付宝绑定户号的初始密码是什么?

(12480)2018-10-17 罗田县人民政府“12345”市民服务热线服务指南

(11170)2019-12-11 公安定性了, 趣码是非法传销! 趣码怎么退回365元?

(11081)2019-12-15 满足你对女同事的幻想 风骚秘书阿朱销魂眼神勾魂摄魄

最新发表

[升平网络工作室]2025-8-23 [2025-08-23]罗田天气预报

[升平网络工作室]2025-8-23 西藏自治区成立60周年庆祝大会隆重举行 习近平出席大会

[升平网络工作室]2025-8-23 县委委员会召开查摆问题整改整治情况汇报会

[爱查小程序]2025-8-22 [爱查]在线听音乐操作说明

[升平网络工作室]2025-8-22 [2025-08-22]罗田天气预报

[升平网络工作室]2025-8-22 习近平率中央代表团抵达拉萨出席西藏自治区成立60周年庆祝活动

[升平网络工作室]2025-8-22 县关工委联合经济开发区开展“情系学子”助学活动 助力职工子女圆梦大学

[升平网络工作室]2025-8-21 2025年罗田县卫健系统赴高校公开招聘事业单位工作人员拟聘用人员公示公告

[升平网络工作室]2025-8-21 [2025-08-21]罗田天气预报

[升平网络工作室]2025-8-21 县安防委2025年度第三次全体(扩大)会召开

QQ|Archiver|手机版|小黑屋|资讯论坛BBS.SPW8.CN ( 鄂ICP备2021011341号-3 )|网站地图


手机扫一扫继续访问
[免责声明]
本站系本网编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。

进入社区 | 发表新帖 | 百度收录 |
技术提供:罗田县升平网络工作室
站长Email:admin@spw8.cn
投诉电话(刮开查看):15374567400

GMT+8, 2025-8-23 17:05 , Processed in 0.239133 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表