Quartz.NET常用方法 01

Quartz.NET作为一款定时框架,它的最小可运行程序如下:

var scheduler = StdSchedulerFactory.GetDefaultScheduler();

scheduler.Start();

//Job执行的任务
var job = JobBuilder.Create<MyJob>().Build();

//Schedule计划表,可以设置调用次数,调用间隔
//Trigger触发器,可以设置调用开始,结束时间,优先级
var trigger = TriggerBuilder.Create().WithSimpleSchedule(
                                     m => m.WithIntervalInSeconds(1).WithRepeatCount(1))
                                    .StartNow()//.EndAt(DateTimeOffset.Now.AddSeconds(10))
                                    .Build();

scheduler.ScheduleJob(job, trigger);

它有两个核心要素:Job和Trigger,Job用于通过实现了IJob接口的泛型即PublishJob告诉框架做什么,而Trigger告诉框架何时做。

MyJob类:

/// <summary>
/// 自定义任务
/// </summary>
public class MyJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        //实现具体的业务逻辑
    }
}

Job常用方法

UsingJobData(key, value)方法

通过这个方法可以给具体的任务实现类即上面的MyJob传值,例如: context.JobDetail.JobDataMap[“count”]

WithDescription(description)方法

用于描述Job的名称,业务逻辑,我一开始还很奇怪任务的名称和业务逻辑完全可以在代码中描述,为何还要有这个方法,原来这个方法的使用场景是:自定义定时任务框架,比如开发一套类似于Windows定时任务的工具。

WithIdentity(name)

给JobKey命名,JobKey是JobBuilder的一个属性,它的底层代码如下:

public JobBuilder WithIdentity(string name)
{
    //new一个JobKey,name是key的名称,group名称是null
    key = new JobKey(name, null);
    return this;
}

StoreDurably(durability)

是否持久化(默认当没有Trigger指向Job时,Job会被删掉)

SetJobData(newJobDataMap)

给JobDataMap设置一个新的对象,这个方法与上面的UsingJobData方法区别在于一个是给JobDataMap添加值,一个是重新给这个对象赋值,它们的底层代码如下。

SetJobData:

public JobBuilder SetJobData(JobDataMap newJobDataMap)
{
    jobDataMap = newJobDataMap;
    return this;
}

UsingJobData:

在这里插入代码片


    public JobBuilder UsingJobData(string key, string value)
    {
        jobDataMap.Put(key, value);
        return this;
    }




 

Trigger常用方法

StartAt(startTimeUtc) 方法

设置触发器开始执行的时间,这个参数是可以设置时区的。

Quartz.NET框架自身还封装了一个日期工具类DateBuilder,它实现类很多返回下一分钟(小时,天等)方法,它与StartAt能够很好地配合。

例如:

DateBuilder.EvenMinuteDateAfterNow(); 返回现在时刻地下一分钟,例如:现在的时间是12点29分20秒,它会返回12点30分00秒

EndAt(endTimeUtc) 方法

与StartAt对应的是EndAt方法,它用于设置触发器的关闭时间

WithSimpleSchedule(action) 方法

创建了一个简单的执行计划,可以设置执行次数,频率等,这个方法是最常用的,我们熟悉的Timer定时器就类似于这个。

它的参数是一个委托Action,我们就是通过调用SimpleScheduleBuilder的方法来设置执行次数&间隔时间的。

WithDailyTimeIntervalSchedule(action) 方法

创建一个功能更强的执行计划,它可以设置每天几点到几点执行,工作日执行或只在周末执行,在执行了几次后停止,在某一个星期执行,设置python基础教程
执行频率等。

它的参数是一个委托Action,我们就是通过调用DailyTimeIntervalScheduleBuilder的方法来设置执行策略的。

WithCronSchedule(cronExpression)方法

通过Corn表达式来设置执行计划,这种方式与上面两种的优点在于我们可以不再通过硬编码的c#教程方式来设置执行策略,而是通过字符串来控制执行策略。

语法如下:

   //秒 分 时 天 月 年 周
    //1. 天或者周必须有一个是?(?表示模糊)
    //2. * 表示所有值即,秒位为*表示每秒执行一次
    //3. - 表示范围,分钟位为10-12表示每个小时的10,11,12分执行一次
    //4. , 表示每个值即,分钟位为10,20,30表示每个小时的10,20,30分执行一次
    //5. / 表示递增,秒位为0/5表示0,5,10,15,20,25,30,35,40,45,50,55秒执行一次
    //例子:
    // * * * * * ?       => 每秒执行一次
    // 0/5 * * * * ?   => 5s执行一次
    // 0 * * * * ?       => 1min执行一次
    // 0 0 1 * * ?       => 每个月1号执行一次
    // 地址:https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值