![Net作业调度(一) -Quartz.Net入门 Quartz表达式生成器 [转] Net作业调度(一) -Quartz.Net入门 Quartz表达式生成器 [转]](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
背景
很多时候,项目需要在不同个时刻,执行一个或很多个不同的作业。
Windows执行计划这时并不能很好的满足需求了。 这时候需要一个更为强大,方便管理,集部署的作业调度了。
介绍
Quartz一个开源的作业调度框架,OpenSymphony的开源项目。Quartz.Net 是Quartz的C#移植版本。
它一些很好的特性:
1:支持集群,作业分组,作业远程管理。
2:自定义精细的时间触发器,使用简单,作业和触发分离。
3:数据库支持,可以寄宿Windows服务,WebSite,winform等。
实战
一:一些基础概念。
Scheduler 作业度器。
IJob 作业接口。 继承并实现Execute, 编写执行的具体作业逻辑。
JobBuilder 根据设置,生成一个详细作业信息(JobDetail)。
TriggerBuilder 根据规则,生产对应的Trigger
二:Nuget安装 PM> Install-Package Quartz 。
三:实例 (详细注释,不单独介绍)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
static void Main( string [] args)
{
//从工厂中获取一个调度器实例化
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start(); //开启调度器
//==========例子1(简单使用)===========
IJobDetail job1 = JobBuilder.Create<HelloJob>() //创建一个作业
.WithIdentity( "作业名称" , "作业组" )
.Build();
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity( "触发器名称" , "触发器组" )
.StartNow() //现在开始
.WithSimpleSchedule(x => x //触发时间,5秒一次。
.WithIntervalInSeconds(5)
.RepeatForever()) //不间断重复执行
.Build();
scheduler.ScheduleJob(job1, trigger1); //把作业,触发器加入调度器。
//==========例子2 (执行时 作业数据传递,时间表达式使用)===========
IJobDetail job2= JobBuilder.Create<DumbJob>()
.WithIdentity( "myJob" , "group1" )
.UsingJobData( "jobSays" , "Hello World!" )
.Build();
ITrigger trigger2 = TriggerBuilder.Create()
.WithIdentity( "mytrigger" , "group1" )
.StartNow()
.WithCronSchedule( "/5 * * ? * *" ) //时间表达式,5秒一次
.Build();
scheduler.ScheduleJob(job2, trigger2);
//scheduler.Shutdown(); //关闭调度器。
}
|
1
2
3
4
5
6
7
8
9
10
|
/// <summary> /// 作业
/// </summary>
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine( "作业执行!" );
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class DumbJob : IJob
{
/// <summary>
/// context 可以获取当前Job的各种状态。
/// </summary>
/// <param name="context"></param>
public void Execute(IJobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
string content = dataMap.GetString( "jobSays" );
Console.WriteLine( "作业执行,jobSays:" + content);
}
}
|
其他
WithCronSchedule("") 强大的时间表达式。
WithSimpleSchedule(x) 一般够用了。
参考资源
Quartz.Net官方2.X教程 http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/index.html
Quartz.Net开源地址 https://github.com/quartznet/quartznet
---------------------------------------------------------------------------------
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
Java版本的地址:http://www.quartz-scheduler.org/documentation,.Net版本的地址:http://quartznet.sourceforge.net/ 。
如果手工进行设置Crons表达式,比较繁琐,本文对之前网上提供的Java的Quartz表达生器源代码进行封装打包,
附件中可进行下载,具体如下图:
下载地址:Quartz表达式生成器