一、配置文件
quartz.config:
# You can configure your scheduler in eitherconfiguration section # or in quartz properties file # Configuration section has precedence quartz.scheduler.instanceName = QuartzTest # configure thread pool info quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz quartz.threadPool.threadCount = 10 quartz.threadPool.threadPriority = Normal # job initialization plugin handles our xml reading, without it defaults are used # quartz.plugin.triggHistory.type = Quartz.Plugin.History.LoggingJobHistoryPlugin quartz.plugin.jobInitializer.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins quartz.plugin.jobInitializer.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
quartz_jobs.xml:
true DataCollectJob DataCollectJobGroup MyJob测试任务 QuartzJob.DataCollectJob, QuartzJob true false DataCollectJobTrigger DataCollectJobGroup TestTrigger测试触发器 DataCollectJob DataCollectJobGroup -1 100000
二、Program.cs代码
using Quartz;
using Quartz.Impl;
using System;
using System.Threading.Tasks;
namespace QuartzJob
{
class Program
{
private static void Main(string[] args)
{
Task.Run(() => { Run().GetAwaiter(); });
Console.ReadKey();
}
public static async Task Run()
{
try
{
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler scheduler = await sf.GetScheduler();
Console.WriteLine("start the schedule");
await scheduler.Start();
Console.WriteLine("end");
}
catch (SchedulerException se)
{
await Console.Error.WriteLineAsync(se.ToString());
}
catch (Exception ex)
{
Console.Write($"err={ex.ToString()}");
}
}
}
}
三、具体的Job逻辑
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Quartz;
using System;
using System.Data;
using System.Text;
using System.Threading.Tasks;
namespace QuartzJob
{
//DisallowConcurrentExecution能保证上一个周期的任务还没执行完之前,下一个周期到来了就会被忽略
[DisallowConcurrentExecution]
public class DataCollectJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
Init();
});
}
}
public void Init()
{
//具体逻辑
}
}



