zoukankan      html  css  js  c++  java
  • Quartz.Net 配置(转载)

    Quartz.Net 有两类配置文件,

    1. Quartz.系统级别配置,  默认配置文件名为 quartz.config , 是java properties 格式的配置文件, 用来设定 quartz 整体行为, 比如 scheduler instance id, 线程池大小, jobstore类型, DB jobstore的数据库地址, quartz 的插件(比如有长时间作业自动 interrupt 插件), 以及定义 job/trigger的配置文件路径

    2. job/trigger的配置文件, 默认名称为 quartz_jobs.xml, 用来配置 job 和 trigger 定义信息

    对于Quartz.系统级的配置,  可以直接用代码设置,  可以放到quartz.config,  也可以 Quartz.Net 也支持定义在 C#项目的 app.config 文件中, 这样就不需要单独再引入 quartz.config 文件.

    下面是写代码的方式设定Quartz.系统级配置的示例:

                   var factory = new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection()
                    {
                        {"quartz.plugin.xml.fileNames","~/quartz_jobs.xml" },
                        {"quartz.plugin.xml.type","Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz"},
                        {"quartz.plugin.triggHistory.type","Quartz.Plugin.History.LoggingJobHistoryPlugin,Quartz"}, 
                    });
                IScheduler scheduler = factory.GetScheduler();
                scheduler.Start();

    定义在 C#项目 app.config 的示例:

    <quartz>
            <add key="quartz.scheduler.instanceName" value="QuartzScheduler" />
            <!-- Configure Thread Pool -->
            <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
            <add key="quartz.threadPool.threadCount" value="10" />
            <add key="quartz.threadPool.threadPriority" value="Normal" />
            <!-- Configure Job Store -->
            <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
            <add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz" />
            <add key="quartz.plugin.xml.fileNames" value="~/quartz_jobs.xml" />
            <add key="quartz.plugin.xml.scanInterval" value="10" />
            <add key="quartz.plugin.xml.failOnFileNotFound" value="true" /> 
     </quartz>
        
     

     注意:

    1.   V2 版本的插件 quartz.plugin.xml  和 V3 版的quartz.plugin.jobInitializer 是一个东西,  v2 插件放在主包中, v3 分离到 Quartz.Plugins 包中了.

    2.   quartz.plugin.xml.scanInterval 参数可以设置定时几秒自动加载job/trigger定义文件, 取值为0表示禁止自动加载job文件.

    3.   xml 文件定义的job 只需要调用  scheduler.Start() 即可自动调度 ; 但使用代码build 的job, 需要额外调用 scheduler.ScheduleJob() 方法才能被调度.

    4.  quartz.net Version 3之后开始支持异步, 我使用的是quart 2.6.2, 即v2的最后一个版本, 还是传统的代码写法.

    5. 如果没有空余线程, job将会等到腾出空余线程才会执行, 但是等待时间如果超过 misfireThreshold 设置时间将放弃本次执行.

    具体可以参考

    https://stackoverflow.com/questions/10952240/quartz-net-job-type-configuration-issues

    https://github.com/castleproject/Windsor.Quartz/blob/master/docs/configuration.md

    https://jalena.bcsytv.com/archives/1994

    https://www.cnblogs.com/skychen1218/p/7765823.html

    下面部分转载自 https://jalena.bcsytv.com/archives/1994

    Quartz.NET 3.x 例子

    2018-03-25 435点热度 1人点赞 0条评论

    最近写项目需要用到定时任务,所以就找到了Quartz.NET,但网上的例子都是到处抄袭的,完全没有适合Quartz.NET 3.x 的有用信息,这里就将自己的使用例子帖一下。

    • IDE:VS2017
    • .Net : 4.5.2

    写在前面

    Quartz.NET 在3.x已经将插件分离了,所以如果要从xml直接加载文件,需要引入插件包


    配置

    app.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <configSections>
        <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </configSections>
    
      <quartz>
        <add key="quartz.scheduler.instanceName" value="QuartzScheduler"/>
        <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
        <add key="quartz.threadPool.threadCount" value="10"/>
        <!--******************************Plugin配置*********************************************-->
        <add key="quartz.plugin.jobInitializer.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins"/>
        <add key="quartz.plugin.jobInitializer.fileNames" value="quartz_jobs.xml"/>
      </quartz>
    
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
      </startup>
    
    </configuration>
     

    quartz_jobs.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- This file contains job definitions in schema version 2.0 format -->
    
    <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>
    
        <!--开始执行一个调度-->
        <job>
          <name>jldwjob</name>
          <group>kelun</group>
          <description>计量单位</description>
          <job-type>Kelun.JldwJob, Kelun</job-type><!--格式:实现了IJob接口的包含完整命名空间的类名,程序集名称-->
          <durable>true</durable>
          <recover>false</recover>
        </job>
        
        <trigger>
          <cron>
            <name>jlwd</name>
            <group>kelun</group>
            <job-name>jldwjob</job-name>
            <job-group>kelun</job-group>
            <!--<start-time>2018-01-22T00:00:00+08:00</start-time>-->
            <cron-expression>0/1 * * * * ?</cron-expression><!--每3秒执行一次-->
          </cron>
        </trigger>
    
      </schedule>
    </job-scheduling-data>

    接口实现

    using Kelun.Log4Net;
    using Quartz;
    using System.Reflection;
    using System.Threading.Tasks;
    
    namespace Kelun
    {
        class JldwJob : IJob
        {
    
            private static readonly IMyLog Logger = MyLogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    
            public Task Execute(IJobExecutionContext context)
            {
                return Task.Run(() => 
                {
                    Logger.Info("定时任务执行");
                });
            }
        }
    }

    启动Quartz

    public MainForm()
    {
        InitializeComponent();
        RunProgramAsync().GetAwaiter().GetResult();
    }
    
    private static async Task RunProgramAsync()
    {
        try
        {
            StdSchedulerFactory factory = new StdSchedulerFactory();
    
            IScheduler scheduler = await factory.GetScheduler();
    
            //开启调度器
            await scheduler.Start();
    
            //创建一个作业
            //IJobDetail job = JobBuilder.Create<JldwJob>().WithIdentity("myJob", "group1").Build();
    
            //ITrigger trigger = TriggerBuilder.Create()
            //    .WithIdentity("myTrigger", "group1")
            //    .StartNow()     //现在开始
            //    .WithSimpleSchedule(x => x
            //        .WithIntervalInSeconds(1)   //触发时间,1秒一次
            //        .RepeatForever())
            //    .Build();
    
            //把作业,触发器加入调度器。
           //await scheduler.ScheduleJob(job, trigger);  
    
            //await scheduler.Shutdown();
    
        }
        catch (SchedulerException se)
        {
            Logger.Error("执行错误", se);
        }
    }
     

    禁用Quartz.NET日志输出

    <logger name="Quartz">
        <level value="OFF" />
    </logger>
     
  • 相关阅读:
    SVN服务器搭建和使用(二)
    SVN服务器搭建和使用(一)
    【CentOs】配置nginx
    【CentOs】sudo使用
    【CentOS】搭建Web服务器
    【CentOS】搭建git服务器
    【Python】内置数据类型
    【Python】Eclipse和pydev搭建Python开发环境
    【Python】一个简单的例子
    【Python】vim7.4 配置python2.6支持Gundo
  • 原文地址:https://www.cnblogs.com/harrychinese/p/quartz_net.html
Copyright © 2011-2022 走看看