zoukankan      html  css  js  c++  java
  • 任务调度框架 Quartz.Net

    一:简介

    Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。

    二:参考

    官方学习文档:http://www.quartz-scheduler.net/documentation/index.html

    官方的源代码下载:http://sourceforge.net/projects/quartznet/files/quartznet

    MVC中使用任务调度框架:http://www.cnblogs.com/best/p/7658573.html

    三:安装的类库文件

    Common.Logging.Core.dll

    Common.Logging.dll

    Quartz.dll

    四:使用实例

    ①建一个普通的控制台项目

    ②添加一个quartz_jobs.xml文件,注意:它的属性必须选择为 始终复制

    <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
    
      <processing-directives>
        <overwrite-existing-data>true</overwrite-existing-data>
      </processing-directives>
    
      <schedule>
        <!--定义示例任务1 Job-->
        <job>
          <name>UseJob</name>  //任务名称,必须填写,并且和任务的类名一样
          <group>UseJobGroup</group> //(选填) 任务所属分组
          <description>TestUseQuratJob</description>
          <job-type>TestUseQurat.UseJob,TestUseQurat</job-type> //(必填) 任务类型,任务的具体类型及所属程序集,格式:实现了IJob接口的包含完整命名空间的类名,程序集名称
          <durable>true</durable>//(选填) 具体作用不知,官方示例中默认为true
          <recover>false</recover>//(选填) 具体作用不知,官方示例中默认为false
        </job>
    
    
        <!--定义示例任务1 触发器 每1秒执行一次DemoJob1任务-->
        <trigger>
          <cron>
            <name>UseJobTrigger</name>//(必填) 触发器名称,同一个分组中的名称必须不同
            <group>UseJobTriggerGroup</group>//(选填) 触发器组
            <job-name>UseJob</job-name>//(必填) 要调度的任务名称,该job-name必须和对应job节点中的name完全相同
            <job-group>UseJobGroup</job-group>//(选填) 调度任务(job)所属分组,该值必须和job中的group完全相同
            <cron-expression>0/1 * * * * ?</cron-expression>
          </cron>
        </trigger>
      </schedule>
    </job-scheduling-data>

    Cron表达式范例:

    
         每隔5秒执行一次:*/5 * * * * ?
    
         每隔1分钟执行一次:0 */1 * * * ?
    
         每天23点执行一次:0 0 23 * * ?
    
         每天凌晨1点执行一次:0 0 1 * * ?
    
         每月1号凌晨1点执行一次:0 0 1 1 * ?
    
         每月最后一天23点执行一次:0 0 23 L * ?
    
         每周星期天凌晨1点实行一次:0 0 1 ? * L
    
         在26分、29分、33分执行一次:0 26,29,33 * * * ?
    
         每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ? 

    ④添加一个quartz.config,注意:它的属性必须选择为 始终复制

    # You can configure your scheduler in either <quartz> configuration section
    # or in quartz properties file
    # Configuration section has precedence
    
    quartz.scheduler.instanceName = ServerScheduler
    
    # configure thread pool info
    quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
    quartz.threadPool.threadCount = 10
    quartz.threadPool.threadPriority = Normal
    
    #--------------------------------*************plugin配置------------------------------------
    # job initialization plugin handles our xml reading, without it defaults are used
    quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
    quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
    
    # export this server to remoting context
    quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
    quartz.scheduler.exporter.port = 555
    quartz.scheduler.exporter.bindName = QuartzScheduler
    quartz.scheduler.exporter.channelType = tcp
    quartz.scheduler.exporter.channelName = httpQuartz

    ⑤实现方法类

        public class UseJob : IJob
        {
            public void Execute(IJobExecutionContext context)
            {
                Action a = () =>
                {
                    var path = @"C:Userspc-1Desktop	ime.txt";
                    var str = $"任务器执行啦,当前时间{DateTime.Now}!";
                    File.AppendAllText(path, str);
                };
                a.BeginInvoke(null, null);
    
            }
        }

    ⑥执行方法

        class Program
        {
            static void Main(string[] args)
            {
    控制台执行:
    #region 方法一
    //不需要添加quartz.config文件 //XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); //ISchedulerFactory sf = new StdSchedulerFactory(); //IScheduler scheduler = sf.GetScheduler(); //Stream s = new StreamReader("../../quartz_jobs.xml").BaseStream; //processor.ProcessStream(s, null); //processor.ScheduleJobs(scheduler); //scheduler.Start(); #endregion 控制台执行: #region 方法二 //ISchedulerFactory sf = new StdSchedulerFactory(); //IScheduler sched = sf.GetScheduler(); //sched.Start(); #endregion if (!Environment.UserInteractive) { //windos服务执行 ServiceBase.Run(new TestUseService()); } else { //控制台执行 ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sched = sf.GetScheduler(); sched.Start(); }
    }
    }

    ⑦执行结果
    任务器执行啦,当前时间2016/10/11 17:36:44!
    任务器执行啦,当前时间2016/10/11 17:36:45!
    任务器执行啦,当前时间2016/10/11 17:36:46!
    任务器执行啦,当前时间2016/10/11 17:36:47!
    任务器执行啦,当前时间2016/10/11 17:36:48!
    任务器执行啦,当前时间2016/10/11 17:36:49!
    任务器执行啦,当前时间2016/10/11 17:36:50!
    任务器执行啦,当前时间2016/10/11 17:36:51!


     

  • 相关阅读:
    jsp教程
    域名解析配置
    ulimit调优|设置普通用户的ulimit值
    进程之间的通信方式
    javascript中的发布订阅模式与观察者模式
    浏览器提供的几种存储
    jquery库与其他库(比如prototype)冲突的解决方法
    流量削峰
    微服务架构下的安全认证与鉴权
    windows远程桌面无法拷贝文件的问题与解决方法
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/5950168.html
Copyright © 2011-2022 走看看