NET CORE定时任务Quartz ,在某个特定时间点执行定时任务

文章介绍了如何使用Quartz.NET框架创建和调度任务。通过实现IJob接口创建任务类,利用TriggerBuilder配置执行频率,如SimpleSchedule用于设定简单的时间间隔重复执行,CronTrigger则支持更复杂的日历时间规划。示例代码展示了不同场景下的任务配置,包括一次性执行和周期性执行等。
摘要由CSDN通过智能技术生成

基本使用
创建任务类:输出一个系统时间就行比较简单(实际是执行任务的方法)

public class TestJob : IJob
{
    public Task Execute(IJobExecutionContext context)
    {
        return Task.Run(() =>
        {
            Console.WriteLine(DateTime.Now);
        });
    }
}

使用控制台开始调度

static void Main(string[] args)
{
    StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
    IScheduler _scheduler =  schedulerFactory.GetScheduler().Result;
    //创建触发器(也叫时间策略),每10秒执行一次,一直重复
    var trigger = TriggerBuilder.Create()
                    .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
                    .Build();
    //创建作业实例
    //TestJob即我们需要执行的作业
    var jobDetail = JobBuilder.Create<TestJob>()
                    .WithIdentity("Test", "Group")//我们给这个作业取了个“Test”的名字,并取了个组名为“Group”
                    .Build();
    //将触发器和作业任务绑定到调度器中
    _scheduler.ScheduleJob(jobDetail, trigger);
    //开启调度器
    _scheduler.Start();
    //注意这种方式编写不能让程序结束,不然控制台运行完程序直接就结束了,定时任务肯定看不到输出了。
    Console.ReadLine();
}

如果只执行一次的话这样即可
WithRepeatCount设置为0

var trigger = TriggerBuilder.Create()
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(0))
                .Build();

更多时间策略
Quartz中有两种触发策略分别是:
Simple Trigger
CronTrigger

SimpleTrigger
可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行,否者只执行具体的次数

每30秒执行一次,重复5次:

var trigger = TriggerBuilder.Create()
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(30).WithRepeatCount(5))
                .Build();

30分钟以后开始触发,仅执行一次

var trigger = TriggerBuilder.Create()
                            .WithSimpleSchedule()
                            .StartAt(DateTimeOffset.Now.AddMinutes(30))
                            .Build();

在22点过3分执行一次,只执行一次。注意这样设置,如果现在时间已经过了22点3分它任务这个定时的时候已经到了会马上执行,要想特定的时间点可以把年月日加上

//在22点过3分执行一次,只执行一次

var trigger = TriggerBuilder.Create()
                .WithSimpleSchedule()
                .StartAt(DateBuilder.DateOf(22, 3, 0))
                .Build();

在某个特定时间点执行定时任务,比如在2022-9-9早上8点执行一次,只执行一次

//在整点8点执行一次,只执行一次
var trigger = TriggerBuilder.Create()
                .WithSimpleSchedule()
                .StartAt(DateBuilder.DateOf(08,0, 0))
                .Build();

立即触发,每个2小时执行一次,直到10:30:30

var trigger = TriggerBuilder.Create()
                            .WithSimpleSchedule(x => x.WithIntervalInHours(2).RepeatForever())
                            .EndAt(DateBuilder.DateOf(10, 30, 30))
                            .Build();

在下一个小时的整点触发,然后每1小时重复一次

var trigger = TriggerBuilder.Create()
                            .WithSimpleSchedule(x => x.WithIntervalInHours(1).RepeatForever())
                            .StartAt(DateBuilder.EvenHourDate(null))
                            .Build();

CronTrigger
CronTrigger比SimpleTrigger更强大一点,可以基于日历的概念指定任务计划,稍后在介绍。
或者搜索一下Cron表达式生成器就有基本可以涵盖所有场景

http://tnblog.net/aojiancc2/article/details/7082

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值