Docker是一個功能齊全的開源做業調度系統,能夠與幾乎任何其餘軟件系統集成或一塊兒使用。express
.NET Framework經過System.Timers.Timer類具備「內置」計時器功能-爲何有人使用Quartz而不是這些標準功能?async
緣由有不少!這裏有一些:工具
首先,安裝Quartz測試
Quartz
而後,定義一個任務類ui
using System; using System.Threading.Tasks; namespace Quartz.ConsoleApp01 { public class HelloJob : IJob { public Task Execute(IJobExecutionContext context) { Console.WriteLine("Hello "+DateTime.Now); return Task.CompletedTask; } } }
最後,實例化並啓動調度程序,並調度要執行的做業:this
using Quartz.Impl; using System; using System.Threading.Tasks; namespace Quartz.ConsoleApp01 { class Program { static async Task Main(string[] args) { Console.WriteLine("開始調度!"); //一、建立一個調度 var factory = new StdSchedulerFactory(); var scheduler = await factory.GetScheduler(); await scheduler.Start(); //二、建立一個任務 var job = JobBuilder.Create<HelloJob>() .WithIdentity("job1", "group1") .Build(); //三、建立一個觸發器 var trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0/5 * * * * ?") //5秒執行一次 .Build(); await scheduler.ScheduleJob(job, trigger); Console.ReadKey(); } } }
咱們來看一下輸出結果:spa
開始調度! Hello 2021/1/19 14:37:40 Hello 2021/1/19 14:37:45 Hello 2021/1/19 14:37:50 Hello 2021/1/19 14:37:55
首先,安裝Quartz,Quartz.Plugins.net
Quartz Quartz.Plugins
而後,定義一個任務類線程
using System; using System.Threading.Tasks; namespace Quartz.ConsoleApp02 { public class HelloJob : IJob { public Task Execute(IJobExecutionContext context) { Console.WriteLine("Hello " + DateTime.Now); return Task.CompletedTask; } } }
接着,配置quartz_jobs.xml文件code
<?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> <!--TestJob測試 任務配置--> <job> <name>job1</name> <group>group1</group> <description>job1</description> <job-type>Quartz.ConsoleApp02.HelloJob,Quartz.ConsoleApp02</job-type> <durable>true</durable> <recover>false</recover> </job> <trigger> <cron> <name>trigger1</name> <group>group1</group> <job-name>job1</job-name> <job-group>group1</job-group> <cron-expression>0/5 * * * * ?</cron-expression> </cron> </trigger> </schedule> </job-scheduling-data>
最後,實例化並啓動調度程序:
using Quartz.Impl; using System; using System.Collections.Specialized; using System.Threading.Tasks; namespace Quartz.ConsoleApp02 { class Program { static async Task Main(string[] args) { Console.WriteLine("開始調度!"); //一、首先,咱們必須得到對調度程序的引用 var properties = new NameValueCollection { ["quartz.scheduler.instanceName"] = "XmlConfiguredInstance", ["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz", ["quartz.threadPool.threadCount"] = "5", ["quartz.plugin.xml.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins", ["quartz.plugin.xml.fileNames"] = "~/quartz_jobs.xml", // this is the default ["quartz.plugin.xml.FailOnFileNotFound"] = "true", // this is not the default ["quartz.plugin.xml.failOnSchedulingError"] = "true" }; //二、建立一個調度 var factory = new StdSchedulerFactory(properties); var scheduler = await factory.GetScheduler(); await scheduler.Start(); Console.ReadKey(); } } }
cron是已存在很長時間的UNIX工具,所以其調度功能強大且通過驗證。
cron表達式是由7段構成:秒 分 時 日 月 星期 年(可選)
表達 | 含義 |
---|---|
0 0 12 * * ? | 天天中午12點(中午)觸發 |
0 15 10 ? * * | 天天上午10:15觸發 |
0 15 10 * * ? | 天天上午10:15觸發 |
0 15 10 * * ? * | 天天上午10:15觸發 |
0 15 10 * * ? 2005 | 2005年期間,天天上午10:15觸發 |
0 * 14 * * ? | 天天從下午2點開始,直到下午2:59結束,每分鐘觸發一次 |
0 0/5 14 * * ? | 天天從下午2點開始,直到下午2:55,每5分鐘觸發一次 |
0 0/5 14,18 * * ? | 天天從下午2點開始到下午2:55結束,每5分鐘觸發一次,而且天天下午6點開始到下午6:55結束,每5分鐘觸發一次 |
0 0-5 14 * * ? | 天天從下午2點開始,直到下午2:05結束,每分鐘觸發一次 |
0 10,44 14 ? 3 WED | 3月的每一個星期三下午2:10和2:44 pm觸發。 |
0 15 10 ? * MON-FRI | 每一個星期一,星期二,星期三,星期四和星期五的上午10:15觸發 |
0 15 10 15 * ? | 每月的15日上午10:15觸發 |
0 15 10 L * ? | 每月的最後一天上午10:15觸發 |
0 15 10 L-2 * ? | 每月的倒數第二個上午10:15觸發 |
0 15 10 ? * 6L | 每月的最後一個星期五上午10:15觸發 |
0 15 10 ? * 6L | 每月的最後一個星期五上午10:15觸發 |
0 15 10 ? * 6L 2002-2005 | 在200二、200三、2004和2005年的每月的最後一個星期五上午10:15觸發 |
0 15 10 ? * 6#3 | 每月的第三個星期五上午10:15觸發 |
0 0 12 1/5 * ? | 從每個月的第一天開始,每個月每5天在中午12點(中午)觸發。 |
0 11 11 11 11 ? | 每一年11月11日上午11:11觸發。 |