QuartzNet的基本使用,Scheduler,Job,Trigger的应用

Quartz.Net是一个强大的任务调度库,主要涉及Scheduler、Job和Trigger的使用。Scheduler负责调度任务,Job执行具体操作,Trigger决定何时触发Job。文章详细介绍了如何创建和使用Scheduler,包括StdSchedulerFactory和DirectSchedulerFactory,以及如何绑定Job和Trigger。同时,讲解了Job的创建、参数传递和ID设置,强调了避免JobID重复的重要性。Trigger部分讲解了WithSimpleSchedule、CronSchedule等不同类型的Trigger,以及如何设置执行时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Quartz.Net的基本使用方法

Quartz.Net的基本使用是比较简单的,主要是对下面三个工具的创建和使用。

  1. Scheduler调度器
  2. Job执行的动作
  3. Trigger触发器

Scheduler的创建和使用

scheduler的创建有几种不同的方式,但一般可以直接使用其提供的工厂类直接创建

  • 通过工厂类创建-----像StdSchedulerFactory和DirectSchedulerFactory
   /*StdFactory是用到最多的情况,亦可以通过NameValueCollection读取不同形式的键值对参数(.prop,.txt应该都可以),其创建的Scheduler即为StdScheduler类型*/
   StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();

   IScheduler scheduler = await stdSchedulerFactory.GetScheduler();

   /*directfatory和stdfactory有很多区别,一般可以用于更细节的Custom,
     1. directfactory为单例设计
     2. directfactory可以通过CreateScheduler(args)自定scheduler 
     3. directfactory无法通过键值对获取初始属性 */
   DirectSchedulerFactory directSchedulerFactory = DirectSchedulerFactory.Instance;


   directSchedulerFactory.CreateScheduler(new DefaultThreadPool(), new RAMJobStore());

   IScheduler scheduler2 = await directSchedulerFactory.GetScheduler();

  • 绑定Job和Trigger
    在scheduler里绑定对应的Job和Trigger,然后调用Start()开始即可。
     static async Task Main(string[] args)
    {
   
        StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();

        IScheduler scheduler = await stdSchedulerFactory.GetScheduler();
        //这里先直接使用builder创建trigger,在后面再详细的解释(PS:withRepeateCount的实际执行次数为count+1)
        ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(action => {
    action.WithIntervalInSeconds(2).WithRepeatCount(1); }).WithIdentity("TriggerOne").Build();

        //创建一个简单的Job,一般的Job都有很多的参数,这里先用无参的方法替代一下。
        IJobDetail job = JobBuilder.Create<SimpleJob>().WithIdentity("JOB:one").Build();

        await scheduler.ScheduleJob(job, trigger);

        await scheduler.Start();

        //停主线程--查看效果
        Thread.Sleep(7000);
        
    }

    public class SimpleJob : IJob

    {
   
        public async Task Execute(IJobExecutionContext context)
        {
   
            Console.WriteLine("Hello QuartZnet!");
        }
    }

在这里插入图片描述

Job的创建和参数的传递

只要实现IJob接口的类就可以称之为Job类,
IJob接口只有Execute(IJobExecutionContext context)方法
其context为上下文参数,保存着IJob执行过程的信息,
也保存着需要的参数。
方法体则为具体的定时业务

Job的传参方式

Job的传参方式为通过JobDetail的JobDataMap进行键值对存取。


static async Task Main(string[] args)
{
   
    StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();

    IScheduler scheduler = await stdSchedulerFactory.GetScheduler();

    ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(action => {
    action.WithIntervalInSeconds(2).WithRepeatCount(1); }).WithIdentity("TriggerOne").Build();

    IJobDetail job = JobBuilder.Create<SimpleJob>().WithIdentity("JOB:one").
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗马苏丹默罕默德

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值