1.新建项目
新建一个.NetFramework控制台引用程序。
2.添加引用
添加:
Quartz
Quartz.Jobs
Quartz.Plugins
3.添加Quartz.xml
quartz_jobs.xml
4.创建MyJob类
添加一个类,实现IJob
namespace QuartzDemo { class MyJob : IJob { public static int i = 0; public Task Execute(IJobExecutionContext context) { //做什么(例子:写文件) string path = AppDomain.CurrentDomain.BaseDirectory + DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".txt"; File.WriteAllText(path, $"这是第{i++}次执行"); return Task.CompletedTask; } } }
5.配置Quartz.xml
可以进行多配置,C+V +稍微改动
源码:
<?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 任务配置--> <job> <name>MyJob</name> <group>MyJobGroup</group> <description>任务</description> <job-type>QuartzDemo.MyJob,QuartzDemo</job-type> <durable>true</durable> <recover>false</recover> </job> <trigger> <!--cron:https://cron.qqe2.com/--> <cron> <name>JobATrigger</name> <group>ABCGroupTrigger</group> <job-name>MyJob</job-name> <job-group>MyJobGroup</job-group> <!--<start-time>2015-01-22T00:00:00+08:00</start-time>--> <cron-expression>0/3 * * * * ?</cron-expression> </cron> </trigger> </schedule> </job-scheduling-data>
6.Main方法中启动调度器
var scheduler =Task.Run(() => StdSchedulerFactory.GetDefaultScheduler()).Result;
或者创建一个类 来控制启动停止。。。。等方法。
namespace QuartzDemo { class Program { static void Main(string[] args) { var scheduler = new StdSchedulerFactory().GetScheduler().Result; scheduler.Start();//启动 Thread.Sleep(20000); //等待20秒 scheduler.Shutdown();//停止 } } }
7.添加Config(Quartz.config>App.config>Web.config)
什么项目就写在对应的配置文件中。也可以单独通过 Quartz.config控制 或者 MVC直接写在Web.config WINForm写在App.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="quartz" type="System.Configuration.NameValueSectionHandler" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" /> </dependentAssembly> </assemblyBinding> </runtime> <quartz> <!-- 指定调度器的实例名称 --> <add key="quartz.scheduler.instanceName" value="TestHandler" /> <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool,Quartz" /> <!-- 设置线程池的最大线程数量 --> <add key="quartz.threadPool.threadCount" value="10" /> <!-- 设置作业中每个线程的优先级,可取 System.Threading.ThreadPriority 中的枚举--> <add key="quartz.threadPool.threadPriority" value="2" /> <add key="quartz.jobStore.misfireThreshold" value="60000" /> <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" /> <add key="quartz.serializer.type" value="binary" /> <!-- Plugin配置 --> <add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz.Plugins" /> <!-- 作业配置文件路径及名称 --> <add key="quartz.plugin.xml.fileNames" value="~/quartz_jobs.xml" /> </quartz> </configuration>
8.运行项目
项目结构:
Bin/Debug中的定时写的事情。仔细看时间,除第一次外,都是3秒一次。通过Quartz.xml的Trigger时间管理大师管控