Quartz.net快速入门

         之前在使用Java的时候,写过Quartz的博客,原文链接:https://blog.csdn.net/qq_41061437/article/category/8523862,现在做.net开发的时候,有个任务需要做定时调度作业,于是想到了Quartz,于是搜索了一番,发现Quartz还真迁移到了.net中,至此,我发现Java中很多优秀的框架或者组件都有迁移到.net中。虽然.net中的Quartz与Java中的Quartz相差不大,但为了学习记录,这里还是进行一下记录。

         因为开发原因,我选择的是老版本2.5.0,这里也针对这个版本的使用来记录。首先就是下载Quartz,通过Nuget安装即可,选择2.5.0版本。

        我们来看一下里面的主要接口和类:

        IScheduler :和调度器交互的主要接口
        JobBuilder:定义 JobDetail 实例
        IJobDetail:定义 Job 实例及其它相关的静态信息
        IJob:自定义的作业模块所要继承的接口,调度器会调用这个实现
        TriggerBuilder:定义 Trigger 实例
        ITrigger:定义 Job 被触发的时间

        整个创建流程如下:

        ①创建作业调度器 IScheduler

        ②启动调度器

        ③创建作业IJobDetail

        ④创建调度器ITrigger

        ⑤将作业和调度器加入到作业调度器中

        代码实现如下:

static void Main(string[] args)
{
    // 创建作业调度器
    ISchedulerFactory chedulerFactory = new StdSchedulerFactory();
    IScheduler scheduler = chedulerFactory.GetScheduler();

    // 启动调度器
    scheduler.Start();

    // 创建作业
    IJobDetail job = JobBuilder.Create<NewJob>()
        .WithIdentity("NewJob", "group")
        .Build();

    // 创建触发器,每5s执行一次
    ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("trigger", "group")
        .StartNow()   //现在开始
        .WithSimpleSchedule(x => x         //触发时间,5秒一次。
            .WithIntervalInSeconds(5)
            .RepeatForever())   不间断执行
        .Build();

    // 加入到作业调度器中
    scheduler.ScheduleJob(job, trigger);
}

//作业
public class NewJob : IJob
{
    
    public async Task Execute(IJobExecutionContext context)
    { 
        Console.WriteLine(DateTime.Now);
    }
}

        Quartz中有个cron表达式来进行时间的配置,比如某天什么时候开始执行,再或者每隔多少时间开始执行,再比如每天的什么时候开始执行,具体cron表达式怎么配置不做过多介绍,可以看我之前的博客。下面我们修改一下上面的代码,让其每天下午六点提醒我们收拾东西,要下班回家了。

        

static void Main(string[] args)
{
    // 创建作业调度器
    ISchedulerFactory chedulerFactory = new StdSchedulerFactory();
    IScheduler scheduler = chedulerFactory.GetScheduler();

    // 启动调度器
    scheduler.Start();

    // 创建作业
    IJobDetail job = JobBuilder.Create<NewJob>()
        .WithIdentity("NewJob", "group")
        .Build();

    // 创建触发器,每天18:00执行一次
    ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("trigger", "group")
        .StartNow()   //现在开始
        .WithCronSchedule("0 0 18 * * ? *")
        .Build();

    // 加入到作业调度器中
    scheduler.ScheduleJob(job, trigger);
}

//作业
public class NewJob : IJob
{
    
    public void Execute(IJobExecutionContext context)
    { 
        Console.WriteLine("不要摸鱼了,收拾东西,下班回家了!");
    }
}

        当然,Quartz是很强大的一个任务调度框架,关于更多的使用,我将在后期继续更新。

发布了165 篇原创文章 · 获赞 41 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_41061437/article/details/100534700