VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > VB.net教程 >
  • 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
        }

      
    }
 <job>
      <name>名称</name>
      <group>分组</group>
      <description>描述</description>
      <job-type>类库</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>
复制代码

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

 

 

主要代码

复制代码
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<MainService>((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


相关教程