Quartz.Net—初识

摘要:
什么是石英。净计划任务和时间框架。本文使用石英3.0.2版石英的官方项目。默认的10个线程池称为工作线程,其中一个称为quarterschedulerthread。它们都集成了石英线,这是石英的默认线池。5.JobStore分为dbstore和ramstore线程http://www.cnblogs.com/wudequn/p/7571039.html设计模式抽象工厂ISchedulerFactoryStdSchedulerFactory:IScheduler FactoryDirectSchedulerFactory:ISchedulerFactory用于以链式方式构建TriggerBuilderJobBuilderDateBuilder。
什么是Quartz.Net

计划任务,定时框架。大到可以做灾难转移  负载均衡。小到可以做定时生成数据,数据更新等等。

官网  http://www.quartz-scheduler.org/    Quartz.Net是Quartz    JAVA版本的移植版本,所以http://www.quartz-scheduler.org/介绍的也是java版本的,  .net的官网是https://www.quartz-scheduler.net/

本文使用quartz版本3.0.2(VS2017打开   C#7.1)

Quartz.Net—初识第1张

 quartz的官方项目还是很完整的。学习起来很方便。

计划任务包含的元素

Scheduler-调度器

任务的管理、协调者。

像一个工厂中流水线的管理员,管理各个流水线的工作。

JOB-作业

就是要执行什么动作。

像工厂中每个流水线具体执行的什么工作。

TRIGGER-触发器

就是什么时候什么条件执行。

像工厂中每个流水线的工作时间表。

创建一个简单任务
private async void button1_Click(object sender, EventArgs e)
{
    ISchedulerFactory sf = new StdSchedulerFactory();
    //开启10+1个线程    只不过都是等待状态
    IScheduler sched =await sf.GetScheduler();



    Console.WriteLine("任务开始");
    //会激活调度线程   从jobstore中读取快要执行的trigger,然后获取相关联的job进行执行
    await sched.Start();



    IJobDetail job = JobBuilder.Create<MyJob1>().WithDescription("工作任务描述1").WithIdentity("job1", "group1").Build();

    //DateTimeOffset时间偏移,一般UTC是世界统一时间,世界各地时区不同(TimeZoneInfo),世界就不一样,所以每一个地方都有自己的时间偏移量
    DateTimeOffset runtime = DateBuilder.EvenSecondDateAfterNow();
    ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger1", "group1").WithSimpleSchedule(t=>t.WithIntervalInSeconds(1).RepeatForever()).Build();

    //开始调度任务
    await sched.ScheduleJob(job, trigger);


    
    
    await Task.Delay(TimeSpan.FromSeconds(60));
    Console.WriteLine("任务结束");
    await sched.Shutdown(true);
}

Quartz中的几个构件

1、Scheduler    调度器   (一个大的容器)

2、Job

3、Trigger

一个job可以有多个trigger

4、Simplethreadpool    (10+1的关系)

最终的执行都是委托给线程池执行的。 默认   10个线程池叫做workthread,  一个是调度线程叫做 quartzschedulerthread(作用获取到当前快要执行的线程)。他们都集成quartzthread

他是quartz默认的线程池,在thread上面封装的

5、JobStore

分为dbstore 和 ramstore

 Quartz.Net—初识第2张

多线程介绍 http://www.cnblogs.com/wudequn/p/7571039.html

用到设计模式

抽象工厂

ISchedulerFactory

StdSchedulerFactory : ISchedulerFactory

DirectSchedulerFactory : ISchedulerFactory

建造者

链式建造

TriggerBuilder

JobBuilder

DateBuilder

(构建过程是稳定的

国建过程都是返回当前类的引用。方便链式构造

可插拔式,IOC模式

先读取配置文件中配置的,要是没有就默认一个。这样组件就可以被替换。

AOP

Quartz.Net—初识第3张Quartz.Net—初识第4张
public class MyJobListener1 : IJobListener
{
    public string Name
    {
        get
        {
            return "L1";
        }
    }

    public Task JobExecutionVetoed(IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
    {
        return Task.Factory.StartNew(() =>
        {
            Console.WriteLine("JobExecutionVetoed");
        });
    }

    public Task JobToBeExecuted(IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
    {
        return Task.Factory.StartNew(() =>
        {//执行前
            Console.WriteLine("JobToBeExecuted");
        });
        //throw new NotImplementedException();
    }

    public Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException, CancellationToken cancellationToken = default(CancellationToken))
    {
        return Task.Factory.StartNew(() =>
        {
            //执行后
            Console.WriteLine("JobWasExecuted");
        });
    }
}
View Code

sched.ListenerManager.AddJobListener(new MyJobListener1(), GroupMatcher<JobKey>.AnyGroup());

Quartz.Net—初识第5张

Quartz.Net优点

数据库持久化

支持集群

可视化管理界面web

事件灵活控制cron

免责声明:文章转载自《Quartz.Net—初识》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇qt 5 界面美化Dijkstra和堆优化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)

什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定)。 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文件,但总需要重新启动web服务啊,研究了下Quartz在Spring中的动态定时,发现<bean > <property name="job...

QUARTZ系列之一-基础概念(Scheduler/Job/JobDetail/Trigger)

摘抄自quartz官方文档: The key interfaces of the Quartz API are: Scheduler - the main API for interacting with the scheduler.  (quartz提供的用来和调度器交互的API) Job - an interface to be implemen...

ASP.NET Core使用Quartz定时调度

在应用程序开发过程中,经常会需要定时任务调度功能,本篇博客介绍Asp.net Core如何使用Quartz完成定时调度 一、Quartz使用步骤 创建调度器scheduler,并开启 创建Job作业 创建tigger触发器 把作业和触发器放入调度器中 二、Quartz的API IScheduler - 与 scheduler 进行交互的主要接口 IJ...

Quartz基本使用

1.Quartz概述:简单的说就是java的一个定时任务的框架,没有那么复杂的解释,跟前端的定时器一样。在了解它之前,首先熟悉几个概念。 2.基本概念 2.1 Job:表示一个工作,要执行的具体内容。此接口中只有一个方法      void execute(JobExecutionContext context) 2.2 JobDetail:JobDeta...

.net/c#常用框架/中间件简介

任务调度 Quartz.NET:Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。Quartz.NET允 许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还...

Quartz.NET简介

概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。 参...