zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Spring面试题目
    20个非常有用的Java程序片段
    第一个前台页面----xflow的页面
    java中io对文件操作的简单介绍
    java的两种异常runtimeException和checkedException
    jquery的校验规则的方法
    json对象的简单介绍
    http的状态码(中英文)
    eclipse的调试方法的简单介绍
    软件测试人员需要精通的开发语言(3)--- Linux
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14265342.html
Copyright © 2011-2022 走看看