【c#】Quartz开源任务调度框架学习及练习Demo

这篇具有很好参考价值的文章主要介绍了【c#】Quartz开源任务调度框架学习及练习Demo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Quartz开源任务调度框架学习及练习Demo

1、定义、作用

2、原理

3、使用步骤

4、使用场景

5、Demo代码参考示例

6、注意事项

7、一些Trigger属性说明

1、定义、作用

Quartz是一个开源的任务调度框架,作用是支持开发人员可以定时处理业务,比如定时发布邮件等定时操作。

2、原理

Quartz大致可以分为四部分,但是按功能分的话三部分就可以:schedule(调度器是schedule的一个调度单元)、job(任务)、Trigger(触发器)

scedule功能:统筹任务调度,
JOB:实现具体的任务
Trigger:设置触发任务的条件,比如定时

【c#】Quartz开源任务调度框架学习及练习Demo,c#,1024程序员节

3、使用步骤

1、在项目NUGET包管理器中安装并添加Quartz引用
2、创建JOB任务类,继承并实现Ijob接口,在接口Execute方法中写具体任务
3、创建Schedule调度器
4、创建作业JOB,设置作业名称,将作业注册到调度器中
5、创建触发器trigger对象,设置触发器名称,触发时机,将触发器注册到调度器中
6、启动调度器,开始作业
7、调度器根据触发器设置,决定何时执行作业
8、执行作业execute方法,执行具体作业逻辑
9、调度器根据触发器设置,决定下一次执行作业时间
10、重复执行8、9直到结束

4、使用场景

执行定时任务

5、Demo代码参考示例

JOB任务类:

using Quartz;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DesignTimerService
{
    public class TestJob : IJob
    {
        string content = null;
        public async Task Execute(IJobExecutionContext context)
        {
            await Task.Run(() =>
            {
            	//这里写任务的具体业务逻辑
                content = "现在是北京时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

                WriteLog();
            });


        }

        public string WriteLog()
        {
            string path = @"C:\Users\KK\Desktop\log.txt";
           
            //
            if (!File.Exists(path))
            {
                FileStream fs = File.Create(path);
                fs.Close();

            }
            else
            {
                StreamWriter writer = new StreamWriter(path, true, Encoding.Default);
                writer.WriteLine(content);
                writer.Flush();
                writer.Close();
                
            }
            return content;
        }

    }
}

任务调度类:

using DesignTimerService;
using Quartz;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace JOB1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //创建调度单元
            Task<IScheduler> tsk = Quartz.Impl.StdSchedulerFactory.GetDefaultScheduler();
            IScheduler scheduler = tsk.Result;
            //创建具体的作业,具体的job需要单独在一个执行文件中执行
            IJobDetail Job = JobBuilder.Create<TestJob>().WithIdentity("奇偶比JOB1").Build();
            //IJobDetail Job2 = JobBuilder.Create<TestJob>().WithIdentity("奇偶比JOB2").Build();
            //创建并配置一个触发器
            ITrigger _ctroTrigger = TriggerBuilder.Create().WithIdentity("定时奇偶比1").StartNow().Build() as ITrigger;
            //将job和trigger加入到作业调度中
            scheduler.ScheduleJob(Job, _ctroTrigger);
            //开启调度
            scheduler.Start();

          
        }

        private void btn_display_Click(object sender, EventArgs e)
        {
            string path = @"C:\Users\KK\\Desktop\log.xls";

            if (!File.Exists(path))
            {
                string path1 = @"C:\Users\KK\\Desktop\log.txt";
                StreamReader reader = new StreamReader(path1);
                string content = reader.ReadToEnd();
                tb_content.Text = content;

            }
            else
            {
                StreamReader reader = new StreamReader(path);
                string content = reader.ReadToEnd();
                tb_content.Text = content;
            }
        }
    }
}

6、最终效果

【c#】Quartz开源任务调度框架学习及练习Demo,c#,1024程序员节

7、一些Trigger属性说明

1.WithSimpleSchedule: 指定从某一个时间开始,以一定的时间间隔(单位是毫秒)执行的任务。

.WithSimpleSchedule(t => {
      t.RepeatForever();//重复次数不限
      //上下两者取其一
      t.WithRepeatCount(5);//设置重复次数,例如5次
      t.WithIntervalInHours(1);//设置执行间隔
      //上下两者取其一
      t.WithInterval(new TimeSpan(1, 2, 10));//设置重复间隔,用具体的小时,分钟,秒
 })

2.WithCalendarIntervalSchedule:
和WithSimpleSchedule类似,不同的是.SimpleSchedule指定的重复间隔只有(时,分,秒)而CalendarIntervalSchedule可以时(年,月,周,天,时,分,秒)

.WithCalendarIntervalSchedule(t => {
      t.WithIntervalInDays(1);//间隔以天为单位
      t.WithIntervalInWeeks(1);//间隔以周为单位
      t.WithIntervalInMonths(1);//间隔以月为单位
      t.WithIntervalInYears(1);//间隔以年为单位
})

3.WithDailyTimeIntervalSchedule: 指定每天的某个时间段内,以一定的时间间隔执行任务。并且它可以支持指定星期

.WithDailyTimeIntervalSchedule(t => {
      t.OnEveryDay();//每天执行
      t.OnDaysOfTheWeek(DayOfWeek.Monday,DayOfWeek.Saturday);//每周的星期几执行
      t.OnMondayThroughFriday();//设置工作日执行(周一至周五)
      t.OnSaturdayAndSunday();//设置周末执行
      t.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0,30));//设置执行的开始时间
      //只设置开始时间,会在开始以后一直执行
      t.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(1, 0));//设置停止执行的时间
      //二者表示,开某个时间段执行
      t.WithIntervalInHours(2);//设置重复间隔(更据方法不同可是时,分,秒)
      t.WithRepeatCount(10);//设置总共执行次数
})

4.StartNow()和.StartAt(new DateTimeOffset(new DateTime(2018,1,10))):

StartNow:表示启动后立即执行一次.
StartAt:表示启动后在指定日期或时间开始执行

5.WithCronTrigger:文章来源地址https://www.toymoban.com/news/detail-721541.html

以表达的形式定义触发条件

到了这里,关于【c#】Quartz开源任务调度框架学习及练习Demo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Quartz.NET,强大的开源作业调度框架

    Quartz.NET是一个强大的开源作业调度框架,专为C#和.NET开发而设计。它允许开发人员在应用程序中调度、执行和管理各种类型的作业,例如定时任务、后台作业、周期性作业等。Quartz.NET具有高度可配置性和灵活性,可以满足各种复杂的调度需求。 **作用:** Quartz.NET的作用在于

    2024年02月09日
    浏览(48)
  • 【开源项目】任务调度框架PowerJob介绍及源码解析

    PowerJob(原OhMyScheduler)是全新一代分布式调度与计算框架,能让您轻松完成作业的调度与繁杂任务的分布式计算。 源码:https://gitee.com/KFCFans/PowerJob 官网:http://www.powerjob.tech/index.html https://www.yuque.com/powerjob/guidence/nyio9g 服务端启动 PowerJobServerApplication 启动。 AkkaStarter.init(); ,

    2023年04月16日
    浏览(43)
  • 分布式任务调度(00)--Quartz

    调度器 :工厂类创建Scheduler,根据触发器定义的时间规则调度任务 任务:Job表示被调度的任务 触发器:Trigger 定义调度时间的元素,按啥时间规则执行任务。一个Job可被多个Trigger关联,但是一个Trigger 只能关联一个Job 执行任务调度核心类QuartzSchedulerThread: 调度线程从JobSt

    2024年02月05日
    浏览(54)
  • Quartz实战:基于Quartz实现定时任务的动态调度,实现定时任务的增删改查

    Quartz使用文档,使用Quartz实现动态任务,Spring集成Quartz,Quartz集群部署,Quartz源码分析 Quartz使用文档,使用Quartz实现动态任务,Spring集成Quartz,Quartz集群部署,Quartz源码分析 此处省略了SysJob实体类,以及Mapper等对数据库的操作。 本文只是大致实现一个基于Quartz实现定时任务

    2024年02月15日
    浏览(49)
  • Quartz.NET配置文件:简便任务调度,轻松管理

      概述: Quartz.NET是一个强大的任务调度库,支持通过配置文件灵活配置任务和触发器。配置文件中定义了调度器、线程池、作业和触发器的相关信息。默认情况下,Quartz.NET在应用程序根目录查找名为 quartz.config 的配置文件。若配置文件位于其他路径或具有不同名称,可以通

    2024年03月09日
    浏览(56)
  • 【开源框架】Golang DAG 任务调度框架 Goflow 全解析——源代码模型、使用示例等

    Simply way to control goroutines execution order based on dependencies.

    2024年02月06日
    浏览(56)
  • 基于 Quartz.NET 可视化任务调度平台 QuartzUI

    QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理,Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 QuartzUI 从 2022 年到现在没有提交记录,这里的部署使用的是最后一个版本的镜像。Windows D

    2024年04月25日
    浏览(50)
  • Quartz.Net调度框架简介

    Quartz.Net是一个功能强大的开源任务调度框架,它可以在C#应用程序中实现灵活、可靠的任务调度和定时作业。它的主要作用是允许开发人员按照预定的时间表执行各种任务,例如定期生成报表、发送电子邮件、备份数据等。 在C#中使用Quartz.Net进行配置、开发和部署的步骤如下

    2024年02月09日
    浏览(41)
  • 定时任务特辑 | Quartz、xxl-job、elastic-job、Cron四个定时任务框架对比,和Spring Boot集成实战

    专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏: Python 专栏: Redis 专栏: TensorFlow 专栏: Logback 专栏: 量子计算: 量子计算 | 解密著名量子算法Shor算法和Grover算法 AI机器学习实战: AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析 AI机器学习 | 基于lib

    2024年02月05日
    浏览(56)
  • 若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz)

    关于若依定时任务的使用可以去看视频默认定时任务的使用 关于springboot整合quartz的整合参考 (150条消息) 定时任务框架Quartz-(一)Quartz入门与Demo搭建_quarzt_是Guava不是瓜娃的博客-CSDN博客 (150条消息) SpringBoot整合Quartz_springboot quartz_桐花思雨的博客-CSDN博客 简单来说,启动一个定任

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包