Quartz - 作业调度框架-插件化开发

背景

大部分业务都是基于定时的任务,特别适合使用quartz这类框架解决定时问题。具体quartz的使用,看官方文档就可以了。下面谈谈对quartz插件化的封装。我们使用quartz.plugin。然后在quartz_jobs.xml方法里面定义了schedule,其中灵活的地方在于,里面定义了Jobs的属性,在QuartzPlugin的start方法执行的时候,会去加载quartz_jobs文件,逐个job信息进行加载。

解决思路

在实际使用中,开发就变得相对简单了,不需要关注job任务是如何被调度的。只需要在程序中定义一个类实现job接口,填充业务代码,然后在文件里面填写该job属性:

[DisallowConcurrentExecution]

    public class AnalysisJob : IJob

    {

        public void Execute(IJobExecutionContext context)

        {

          xxxxxxxxxx

        }


    }

      名称

      分组

      描述

      类库

      true

      false

   

这样的封装就赋予框架新的技能,大大提高了开发人员的开发效率。


主要代码

using System;

using System.Collections.Generic;

using System.Linq;

using Topshelf;

namespace HSCP.Task

{

    class Program

    {

        static void Main(string[] args)

        {

            HostFactory.Run(x =>

            {

                x.Service((s) =>

                {

                    s.ConstructUsing(settings => new MainService());

                    s.WhenStarted(tr => tr.Start());

                    s.WhenStopped(tr => tr.Stop());

                });

                x.RunAsLocalSystem();

                x.SetDescription("");

                x.SetDisplayName("xxxx任务管理器");

                x.SetServiceName("HSCP.Task");

            });

        }

    }

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Quartz;

using Quartz.Impl;

namespace HSCP.Task

{

    class MainService

    {

        static IScheduler sched;

        public void Start()

        {

            try

            {

                ISchedulerFactory factory = new StdSchedulerFactory();

                sched = factory.GetScheduler();

                sched.Start();

                Console.WriteLine($"共 {sched.GetJobGroupNames().Count} 任务");

                foreach (string gn in sched.GetJobGroupNames())

                    Console.WriteLine(gn);

            }

            catch (Exception exc)

            {

                Console.WriteLine(exc.ToString());

            }

            // NLogger.Info(string.Format("启动成功 {0}", DateTime.Now));

        }

        public void Stop()

        {

            sched.Shutdown(true);

        }

    }

}

开源地址

https://github.com/quartznet/quartznet

你可能感兴趣的:(Quartz - 作业调度框架-插件化开发)