Quartz.Net—配置化

Schedule配置  线程数量

如果一个Schedule中有很多任务,这样默认的10个线程就不够用了。

有很多种方法配置线程的个数。

工厂构造函数

webfonfig

quartzconfig

环境变量

建议使用webconfig

quartz.scheduler.instanceName = ExampleDefaultQuartzScheduler

quartz.threadPool.threadCount = 15

quartz.jobStore.misfireThreshold = 60000

# sample configuration based db provider
quartz.dbprovider.customProvider.productName = Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0
quartz.dbprovider.customProvider.assemblyName = System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
quartz.dbprovider.customProvider.connectionType = System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
quartz.dbprovider.customProvider.commandType = System.Data.SqlClient.SqlCommand, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
quartz.dbprovider.customProvider.parameterType = System.Data.SqlClient.SqlParameter, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
quartz.dbprovider.customProvider.parameterDbType = System.Data.SqlDbType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
quartz.dbprovider.customProvider.parameterDbTypePropertyName = SqlDbType
quartz.dbprovider.customProvider.parameterNamePrefix = @
quartz.dbprovider.customProvider.exceptionType = System.Data.SqlClient.SqlException, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
quartz.dbprovider.customProvider.useParameterNamePrefixInParameterCollection = true
quartz.dbprovider.customProvider.bindByName = true
quartz.dbprovider.customProvider.dbBinaryTypeName = Image
View Code

优先级

NameValueCollection 构造函数>环境变量>app.config>web.config

上面的都是为了修改threadcount的数量。是通过反射做的。当然也可以修改其他的变量。

Job  Trigger配置文件

配置文件的好处,不用修改代码,只修改配置文件,就可以动态的更新任务。

Job和Trigger的配置通过插件来实现的。源码中插件项目和quartz项目分开的,需要自己手动合并到一个项目里,不然就要添加三个dll。

 

在源码中有一个xsd文件,这个是job trigger配置文件的架构。把他添加到vs里面xml就会提示job和trigger的xml代码了。

XMLSchedulingDataProcessor是一个专门解析job trigger配置文件的类。 配置文件默认名字是

<?xml version="1.0" encoding="UTF-8"?>

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 version="2.0">
  <!--程序指令-->
  <processing-directives>
    <!--如果程序中定义过trigger和job 将安装这个配置文件中的执行-->
    <overwrite-existing-data>true</overwrite-existing-data>
    <!--不管重复的。 如果是true  程序中将会忽略这个文件中出现的配置。-->
    <!--<ignore-duplicates></ignore-duplicates>-->
  </processing-directives>
  <schedule>
    <job>
      <name>xmlJob</name>
      <group>xmlJobGroupName</group>
      <description>xmlJob</description>
      <!--job的类             类完整名字,程序集名字-->
      <job-type>FrmTimingQuartz.MyJob7, FrmTimingQuartz</job-type>
      <!--持久性-->
      <durable>true</durable>
      <!--恢复-->
      <recover>true</recover>
      <job-data-map>
        <entry>
          <key>name1</key>
          <value>wyx</value>
        </entry>
        <entry>
          <key>key2</key>
          <value>wdq</value>
        </entry>
      </job-data-map>
    </job>
    <trigger>
      <!--四大触发器-->
      <!--http://www.cnblogs.com/wudequn/p/8506938.html-->
      <calendar-interval>
      </calendar-interval>
      <simple>
        <name>xmlTrigger</name>
        <description>xmlTrigger</description>
        <job-name>xmlJob</job-name>
        <job-group>xmlJobGroupName</job-group>
        <priority></priority>
        <!---1无限大-->
        <repeat-count>-1</repeat-count>
        <!--多久轮询一次-->
        <repeat-interval>1000</repeat-interval>
      </simple>
      
    </trigger>
  </schedule>
</job-scheduling-data>
配置文件
        private async void button16_Click(object sender, EventArgs e)
        {
            //quartz.plugin.xml.type  第一部分是类全名  第二部分是类所在程序集
            NameValueCollection nvc = new NameValueCollection() {
                ["quartz.plugin.xml.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz.Plugins, Quartz.Plugins",
                ["quartz.plugin.xml.fileNames"] = "~/quartz_jobs.xml",
                //三秒都一次配置文件,这只这个参数可以让 修改了配置文件也不用重新启动程序。
                ["quartz.plugin.xml.ScanInterval"] = "3"
            };
            //通过namevalue初始化他的各个属性。
            var tf = new StdSchedulerFactory(nvc);

            var sche = await tf.GetScheduler();

            await sche.Start();


        }
调用代码
原文地址:https://www.cnblogs.com/wudequn/p/8627598.html