zoukankan      html  css  js  c++  java
  • 【Quartz】实现接口封装化(二)

      前言  

      通过昨天的努力终于算是了解Quartz这个定时器的简单使用,为了更深一步的了解和基于以后希望在项目中能使用他。所有我对他做了一下简单的封装操作,便于以后从新建立新工作和触发器,也方便写的代码不是那么的杂乱无章,所有就使用接口的方式进行了封装调用,算是个工厂模式的运用吧。哈哈。

      接口类(IExample):

     废话就不多说了,想要实现简单就要有个统一的访问接口,然后让所有的任务去实现统一接口,这样我们只需要调用统一接口就知道了任务所包含的所有方法,管理也方便管理,添加任务只需要实现接口方法就可以了。听起来很单简哪。因为我是实现简单的例子所有我就实现了启动任务,返回当前调度器,暂停,修改四个方法:

    public interface IExample
        {
            /// <summary>
            /// 启动当前任务
            /// </summary>
            /// <returns></returns>
            Task Run();
            /// <summary>
            /// 返回当前调度器
            /// </summary>
            /// <returns></returns>
            IScheduler GetScheduler();
            /// <summary>
            /// 暂停当前任务
            /// </summary>
            void Shutdown();
            /// <summary>
            /// 修改当前任务时间触发
            /// </summary>
            void ModiyTime();
    
    
        }

    任务的继承:

    还记得上一篇文章中我们的SimpleExample类吗?下面我们就首先让他继承IExample接口类:

        public class SimpleExample : BaseExample, IExample
        {
            #region 0.创建调度器
            public static ISchedulerFactory sf = new StdSchedulerFactory();
            public async Task<IScheduler> Ceart()
            {
                return await sf.GetScheduler();
            }
            #endregion
            public virtual async Task Run()
            {
                sched = await Ceart();
                //创建任务
                IJobDetail job = JobBuilder.Create<HelloJob>()
                   .WithIdentity("helloJob", "group1")
                   .Build();
                //创建触发器
                // DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);//定义触发规则
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trgTest", "group1")
                     // .StartAt(runTime)
                     .WithCronSchedule("0/5 * * * * ?")     //5秒执行一次
                    .Build();
                //将任务与触发器添加到调度器中
                await sched.ScheduleJob(job, trigger);
                //启动任务
                await sched.Start();
            }
    
        }
    View Code

    然后我又创建了很多工作组,你说什么没有 返回当前调度器,暂停,修改三个方法,没想到还是被你发现了。

    父类实现:

    由于在项目实际中我们回创建很多的任务组,任务不一样,但是基础方法都是通用的所有我们创建父类实现方法的公用。这样我们只需要注重我们的任务方法就行了。

        /// <summary>
        /// 扩展方法基类
        /// </summary>
        public class BaseExample
        {
            protected static  IScheduler sched = null;
    
            #region 1.返回当前调度器
            /// <summary>
            /// 返回当前调度器
            /// </summary>
            /// <returns></returns>
            public IScheduler GetScheduler()
            {
                return sched;
            }
            #endregion
    
            #region 2.暂停当前任务
            /// <summary>
            /// 暂停当前任务
            /// </summary>
            public void Shutdown()
            {
                if (sched != null)
                {
                    sched.Shutdown();
                }
            }
            #endregion
    
            #region 3.修改当前任务触发时间
            public void ModiyTime()
            {
                ITrigger trigger = TriggerBuilder.Create()
                   .WithIdentity("trg1", "group1")
                    // .StartAt(runTime)
                    .WithCronSchedule("0/10 * * * * ?")     //10秒执行一次
                   .Build();
                sched.RescheduleJob(trigger.Key, trigger);
                sched.Start();
            }
    
            #endregion
    
        }
    View Code

    这里创建好了之后,只需要在没添加一个任务继承此类即可实现了该类的方法,是不是这样看起来就简单多了。

    下面就是我的大致层次:

    写在这里也是给我一点记忆帮助,也为了刚接触的小伙伴能快速理解一下。东西不是很多也不很深很好理解。

  • 相关阅读:
    android Scroller类的理解
    android 小方法
    android 小知识点
    【转】Android TouchEvent事件传递机制
    android 自定义控件二之仿QQ长按删除
    android ExpandAbleListView控件
    android AChartEngine图标引擎
    2018.11.07-1117-无序字母对 character
    2018.11.07-4031-reverse
    2018.11.07-1015-幸运字符串查询 (lucky)
  • 原文地址:https://www.cnblogs.com/yanbigfeg/p/9044605.html
Copyright © 2011-2022 走看看