Net作业调度(Quartz.Net)

背景

很多时候,项目需要在不同个时刻,执行一个或很多个不同的作业。

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表达生器源代码进行封装打包,






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值