c#版本QUARTZ DEMO示例,其自带接口方法已足够全面。
任务调度器
:Scheduler,来自于Scheduler工厂,其会自动加载持久层的任务数据并等待启动。注意任务调度器关闭后不能重启,所以任务调度器应在进程关闭时调用。
任务
:job,任务可以有多个触发器在,也就是任务可以有多个出发时间点。job停止会停止多触发器下的所有该job。
触发器
:Trigger,用来设置时间,作用在于到达时间点时执行对应的job。触发器停止只停止该触发器去出发某一job,其他触发器仍可以触发该job。
一般使用代码中直接配置。如下:
连接MYSQL配置方式,需要mysql驱动dll和Quartz.Serialization.Json.dll和Newtonsoft.Json.dll至同一文件夹
properties = new NameValueCollection
["quartz.scheduler.instanceName"] = "TestScheduler",
["quartz.scheduler.instanceId"] = "instance_one",
["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz",
["quartz.threadPool.threadCount"] = "5",
["quartz.jobStore.misfireThreshold"] = "60000",
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
["quartz.jobStore.useProperties"] = "false",
["quartz.jobStore.dataSource"] = "default",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.jobStore.clustered"] = "true",
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.MySQLDelegate, Quartz",
["quartz.dataSource.default.connectionString"] = "server=192.168.1.50;port=3306;user=root;password=handhand; database=quartznet;" + "SslMode=" + MySqlSslMode.None + ";",
["quartz.dataSource.default.provider"] = "MySql",
["quartz.serializer.type"] = "json"
连接sqlite方式,该方式不可启用集群,需要sqlite驱动dll和Quartz.Serialization.Json.dll和Newtonsoft.Json.dll至同一文件夹
string dataSourceFile = System.Environment.CurrentDirectory + "//quartz_demo.db";
properties = new NameValueCollection
["quartz.scheduler.instanceName"] = "TestScheduler",
["quartz.scheduler.instanceId"] = "instance_one",
["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz",
["quartz.threadPool.threadCount"] = "5",
["quartz.jobStore.misfireThreshold"] = "60000",
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
["quartz.jobStore.useProperties"] = "true",
["quartz.jobStore.dataSource"] = "default",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.jobStore.clustered"] = "false",
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz",
["quartz.dataSource.default.connectionString"] = "Data Source=" + dataSourceFile + ";Pooling=true;FailIfMissing=false;Version=3;UTF8Encoding=True;Journal Mode=DELETE;",
["quartz.dataSource.default.provider"] = "SQLite",
["quartz.serializer.type"] = "json"
无数据库配置文件启动方式,需要引用Quartz.Jobs.dll和Quartz.Plugins.dll
properties = new NameValueCollection
["quartz.plugin.triggHistory.type"] = "Quartz.Plugin.History.LoggingJobHistoryPlugin, Quartz.Plugins",
["quartz.plugin.jobInitializer.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins",
["quartz.plugin.jobInitializer.fileNames"] = "quartz_jobs.xml",
["quartz.plugin.jobInitializer.failOnFileNotFound"] = "true",
["quartz.plugin.jobInitializer.scanInterval"] = "120"
建立任务调度器工厂
factory = new StdSchedulerFactory(properties);
获取任务调度器
scheduler = await factory.GetScheduler().ConfigureAwait(false);
JobKey jKey = new JobKey("job1", "group1");
TriggerKey tKey = new TriggerKey("trigger1", "group1");
IJobDetail job = JobBuilder.Create<TestJob>()
.WithIdentity(jKey)
.Build();
建立触发器
ITrigger trigger = TriggerBuilder.Create()
.StartNow()
.WithIdentity(tKey)
.WithCronSchedule("* * * * * ? *")
.ForJob(job)
.Build();
任务附加到调度器
await scheduler.AddJob(job, true, true).ConfigureAwait(false);
触发器附加到调度器
if (!await scheduler.CheckExists(tKey).ConfigureAwait(false))
await scheduler.ScheduleJob(trigger).ConfigureAwait(false);
log.Info("Trigger Is Exited.");
return;
启动调度器
Task l = scheduler.Start();
l.Wait();
重启调度器
Task l = scheduler.ResumeAll();
l.Wait();
暂停调度器
Task l = scheduler.PauseAll();
l.Wait();
调度器彻底关闭
Task l = scheduler.Shutdown();
l.Wait();
暂停触发器
Task l = scheduler.PauseTrigger(new TriggerKey("trigger1", "group1"));
l.Wait();
重启触发器
Task l = scheduler.ResumeTrigger(new TriggerKey("trigger1", "group1"));
l.Wait();
Task l = scheduler.PauseJob(new JobKey("job1", "group1"));
l.Wait();
Task l = scheduler.ResumeJob(new JobKey("job1", "group1"));
l.Wait();
Task l = scheduler.DeleteJob(new JobKey("job1", "group1"));
l.Wait();
c#版本QUARTZ DEMO示例,其自带接口方法已足够全面。注意任务调度器:Scheduler,来自于Scheduler工厂,其会自动加载持久层的任务数据并等待启动。注意任务调度器关闭后不能重启,所以任务调度器应在进程关闭时调用。任务:job,任务可以有多个触发器在,也就是任务可以有多个出发时间点。job停止会停止多触发器下的所有该job。触发器:Trigger,用来设置时间,作...
因项目需要,在C#中使用了定时程序。自然就使用了Quartz了
但是使用的时候,经过一段时间后,发现了两个重大问题,结果导致的是一样的,就是都导致了定时不会继续执行了。
第一个问题是,定时程序发布在IIS下,但是IIS自己本身是有回收机制的,然后如果到了晚上,没人操作后台了,那么IIS会自动回收定时程序。
这里可以通过代码层面解决,就是说让IIS一直处于被使用状态,自然就不会回收了...
记录一下Quartz简单使用
Quartz是一款比较好用的定时任务执行工具类,这里就简单说一下用法,至于有何优势或者说需要更深层的挖掘,可能就需要您更多的摸索了。
winfrom程序实现
先说一下思路和流程
新建winfrom程序 ,我就命名WindowsFormsApplication1好了
程序NuGet引入Quartz类库,两种引入方法:第一种,程序包管理控制台输入Install-Pac...
如果你只需要你的 job 在某个特定的时刻执行一次, 或者在某一个时刻重复执行几遍, SimpleTrigger 完美解决你的需求.
SimpleTrigger 的属性包括以下几点: start-time, end-time, repeat count, 以及 repeat interval.
repeat count 可以是0或者正整数, 或者 SimpleTrigger.Repe