第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现

一. 前奏-Timer类实现定时任务

在没有引入第三方开源的定时调度框架之前,我们处理一些简单的定时任务同时都是使用Timer类, DotNet中的Timer类有三个,分别位于不同的命名空间下,分别是:

    ①.位于System.Windows.Forms里,即定时器控件,不过多介绍了

    ②.位于System.Threading.Timer类里 (重点介绍)

    ③.位于System.Timers.Timer类里 (不介绍)

  下面重点介绍第二种,位于Threading下面的Timer类,观察其源码,发现有多种构造函数,我们重点介绍其中的一种。

 

 

 分享一段代码:2秒后开启该线程,然后每隔4s调用一次。

            //2秒后开启该线程,然后每隔4s调用一次
             System.Threading.Timer timer = new System.Threading.Timer((n) =>
             {
                 //书写业务逻辑
                 Console.WriteLine("我是定时器中的业务逻辑哦{0}",n);
             }, "1", 2000, 4000);

分析总结:上面的代码显而易见,只能控制:延迟多久开始执行,每隔多久执行一次,至于执行多少次、什么时间关闭均无法实现,更不用说处理一些复杂的时间间隔了,所以Timer类仅仅适合处理对时间要求非常简单的定时任务。

 

 

二. 进入主题-Quartz.Net的入门使用

 

使用步骤:

  前提:通过NuGet引入程序集或者直接下载源码进行引入,然后分五步走。

  步骤一:创建作业调度池(Scheduler)

  步骤二:创建一个具体的作业即job (具体的job需要单独在一个文件中执行)

  步骤三:创建并配置一个触发器即trigger

  步骤四:将job和trigger加入到作业调度池中

  步骤五:开启调度

 

 

下面分享一段简单的代码(立即执行、每隔一秒执行一次、永久执行)

        /// <summary>
        /// Quartz框架的使用
        /// </summary>
        public static void Show()
        {
            //1.创建作业调度池(Scheduler)
            IScheduler scheduler =StdSchedulerFactory.GetDefaultScheduler();
           
            //2.创建一个具体的作业即job (具体的job需要单独在一个文件中执行)
            var job = JobBuilder.Create<HelloJob>().Build();

            //3.创建并配置一个触发器即trigger   1s执行一次
            var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1)
                                                                           .RepeatForever()).Build();
            //4.将job和trigger加入到作业调度池中
            scheduler.ScheduleJob(job, trigger);

            //5.开启调度
            scheduler.Start();
        }
    /// <summary>
    /// 实现IJob接口
    /// </summary>
    class HelloJob : IJob
    {
        void IJob.Execute(IJobExecutionContext context)
        {
            Console.WriteLine("Hellow JOB");
        }
    }

分析:每个Job都需要实现IJob接口,并且显式的实现Execute方法;创建调度器除了上述方法外,还可以:

   //另外一种创建调度池的方法
   var factory = new StdSchedulerFactory();
   IScheduler scheduler2 = factory.GetScheduler();

执行结果:

 

 

三. 扩展-Aop思想的体现

/// <summary>
        /// Quartz中的AOP思想
        /// </summary>
        public static void AopShow()
        {
            //1.创建Schedule
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
            
            //2.创建job (具体的job需要单独在一个文件中执行)
            var job = JobBuilder.Create<HelloJob>().Build();

            //3.配置trigger   1s执行一次
            var trigger = TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1)
                                                                           .RepeatForever()).Build();
            //AOP配置
            scheduler.ListenerManager.AddJobListener(new MyAopListener(), GroupMatcher<JobKey>.AnyGroup());

            //4.将job和trigger加入到作业调度池中
            scheduler.ScheduleJob(job, trigger);

            //5. 开始调度
            scheduler.Start();
        }
    /// <summary>
    /// Aop类
    /// </summary>
    public class MyAopListener : IJobListener
    {
        public string Name
        {
            get
            {
                return "hello world";
            }
        }
        public void JobExecutionVetoed(IJobExecutionContext context)
        {

        }
        public void JobToBeExecuted(IJobExecutionContext context)
        {
            Console.WriteLine("执行前写入日志");
        }
        public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
        {
            Console.WriteLine("执行后写入日志");
        }
    }

 

执行结果:

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值