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
优先级
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(); }