请选择 进入手机版 | 继续访问电脑版

[ASP.NET] Quartz.NET的详细 利用

  [复制链接]
查看286 | 回复76 | 2021-9-15 05:30:45 | 显示全部楼层 |阅读模式
目次

一、什么是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项目,利用 传统三层架构。

Quartz.NET的详细
利用

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

Quartz.NET的详细
利用

Quartz.NET的详细
利用

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

Quartz.NET的详细
利用

只需创建一个定期工作类【RegularWork】,并且继承Quartz.net的IJob接口,I_RegularWork_BLL能注入到RegularWork内必要 UseMicrosoftDependencyInjectionJobFactory.

  1. public class RegularWork : IJob
  2. {
  3. private readonly I_RegularWork_BLL I_bll;
  4. public RegularWork(I_RegularWork_BLL Ibll)
  5. {
  6. I_bll = Ibll;
  7. }
  8. public Task Execute(IJobExecutionContext context)
  9. {
  10. Input_RoomType model = new Input_RoomType();
  11. model.currentPage = 1;
  12. model.pageSize = 1;
  13. var result = I_bll.getRoomTypeList(model);
  14. return Task.Run(() =>
  15. {
  16. using (StreamWriter sw = new StreamWriter(@"F:/Quartz-NET.txt", true, Encoding.UTF8))
  17. {
  18. sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff =>") + JsonConvert.SerializeObject(result));
  19. }
  20. });
  21. }
  22. }
复制代码

在Startup.cs的ConfigureServices方法内通过services去注册RegularWork

  1. //Quartz的工作单元
  2. 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调度中心
  2. services.AddQuartz(q =>
  3. {
  4. //用于注入
  5. q.UseMicrosoftDependencyInjectionJobFactory();
  6. // 基本Quartz调度器、作业和触发器配置
  7. var jobKey = new JobKey("RegularWork", "regularWorkGroup");
  8. q.AddJob<RegularWork>(jobKey, j => j
  9. .WithDescription("My regular work")
  10. );
  11. q.AddTrigger(t => t
  12. .WithIdentity("Trigger")
  13. .ForJob(jobKey)
  14. .StartNow()
  15. .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(10))//开始秒数 10s
  16. .RepeatForever())//持续工作
  17. .WithDescription("My regular work trigger")
  18. );
  19. });
复制代码

ConfigureServices方法内新增加 加Quartz服务

  1. // ASP.NET核心托管-添加Quartz服务器
  2. services.AddQuartzServer(options =>
  3. {
  4. // 关闭时,我们希望作业正常完成
  5. options.WaitForJobsToComplete = false;
  6. });
复制代码

完备 代码

  1. //Quartz的工作单元
  2. services.AddTransient();
  3. //Quartz调度中心
  4. services.AddQuartz(q =>
  5. {
  6. //用于注入
  7. q.UseMicrosoftDependencyInjectionJobFactory();
  8. // 基本Quartz调度器、作业和触发器配置
  9. var jobKey = new JobKey("RegularWork", "regularWorkGroup");
  10. q.AddJob(jobKey, j => j
  11. .WithDescription("My regular work")
  12. );
  13. q.AddTrigger(t => t
  14. .WithIdentity("Trigger")
  15. .ForJob(jobKey)
  16. .StartNow()
  17. .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(10))//开始秒数 10s
  18. .WithRepeatCount(5))//持续工作
  19. .WithDescription("My regular work trigger")
  20. );
  21. });
  22. // ASP.NET核心托管-添加Quartz服务
  23. services.AddQuartzServer(options =>
  24. {
  25. // 关闭时,我们希望作业正常完成
  26. options.WaitForJobsToComplete = false;
  27. });
复制代码

Quartz.NET的详细
利用

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

Quartz.NET的详细
利用

四、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分钟以后开始
"?" :只能出现在 日,星期段内里 ,表示不指定具体 的值
"L" :只能出现在 日,星期段内里 ,是Last的缩写,一个月的末了 一天,一个星期的末了 一天(星期六)
"W" :表示工作日,间隔 给定值迩来 的工作日
"#" :表示一个月的第几个星期几,比方 :"6#3"表示每个月的第三个星期五(1=SUN...6=FRI,7=SAT)

Expression Meaning
0 0 12 * * ? 每天 中午12点触发
0 15 10 ? * * 每天 上午10:15触发
0 15 10 * * ? 每天 上午10:15触发
0 15 10 * * ? * 每天 上午10:15触发
0 15 10 * * ? 2005 2005年的每天 上午10:15触发
0 * 14 * * ? 在每天 下战书 2点到下战书 2:59期间的每1分钟触发
0 0/5 14 * * ? 在每天 下战书 2点到下战书 2:55期间的每5分钟触发
0 0/5 14,18 * * ? 在每天 下战书 2点到2:55期间和下战书 6点到6:55期间的每5分钟触发
0 0-5 14 * * ? 在每天 下战书 2点到下战书 2:05期间的每1分钟触发
0 10,44 14 ? 3 WED 每年三月的星期三的下战书 2:10和2:44触发
0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
0 15 10 15 * ? 每月15日上午10:15触发
0 15 10 L * ? 每月末了 一日的上午10:15触发
0 15 10 L-2 * ? Fire at 10:15am on the 2nd-to-last last day of every month
0 15 10 ? * 6L 每月的末了 一个星期五上午10:15触发
0 15 10 ? * 6L Fire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的末了 一个星期五上午10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
0 0 12 1/5 * ? Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
0 11 11 11 11 ? Fire every November 11th at 11:11am.

到此这篇关于Quartz.NET的具体 利用 的文章就先容 到这了,更多干系 Quartz.NET利用 内容请搜刮 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar Besson | 2021-9-21 02:48:22 | 显示全部楼层
这么版块的帖子越来越有深度了!
回复

使用道具 举报

avatar FREEDOM326 | 2021-9-21 02:48:25 | 显示全部楼层
论坛的人气不行了!
回复

使用道具 举报

avatar David902 | 2021-9-22 21:47:59 | 显示全部楼层
不是惊喜,是惊吓!
回复

使用道具 举报

avatar 心一路向南飞该 | 2021-9-26 20:35:46 | 显示全部楼层
白富美?高富帅?
回复

使用道具 举报

哥回复的不是帖子,是寂寞!
回复

使用道具 举报

admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

avatar lkbt123 | 2021-10-6 05:14:52 | 显示全部楼层
好帖子!
回复

使用道具 举报

avatar 张瘦身 | 2021-10-8 01:49:42 | 显示全部楼层
今天不想骂人!
回复

使用道具 举报

avatar 爸证欢 | 2021-10-10 03:07:04 | 显示全部楼层
无图无真相!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则