博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Net作业调度(一) -Quartz.Net入门 Quartz表达式生成器 [转]
阅读量:6695 次
发布时间:2019-06-25

本文共 2619 字,大约阅读时间需要 8 分钟。

背景

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

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版本的地址:,.Net版本的地址: 。

      如果手工进行设置Crons表达式,比较繁琐,本文对之前网上提供的Java的Quartz表达生器源代码进行封装打包,

附件中可进行下载,具体如下图:

     

      

     

    

   

   

  

  下载地址:

转载地址:http://shpoo.baihongyu.com/

你可能感兴趣的文章
EL表达式取值中文再发送请求时会乱码
查看>>
python3全栈学习笔记-01
查看>>
最小生成树--Prim算法和Kruskal算法
查看>>
《统一沟通-微软-实战》-3-部署-Exchange 2010-1-先决条件
查看>>
FireEye:2012年下半年高级威胁分析报告
查看>>
iOS开发那些事--创建基于故事板的iOS 6的HelloWorld
查看>>
业界重磅新书《UNIX/Linux网络日志分析与流量监控》首发
查看>>
iTunes“解决方案”发展历程及研究(上)
查看>>
为什么在中国“公有云”落地那么难?
查看>>
Provisioning Services 7.8 入门系列教程之十一 通过版本控制自动更新虚拟磁盘
查看>>
Jconsole查看Weblogic自定义MBean
查看>>
扫盲:php session缓存至memcached中的方法
查看>>
SQL Server 视图设计器
查看>>
RHCS集群原理概述
查看>>
redis的密码验证,及哨兵的相关配置
查看>>
网站故障排查几个简单步骤
查看>>
Android开发实践:掌握Camera的预览方向和拍照方向
查看>>
公司网络搭建及×××到公司配置
查看>>
高性能的MySQL(6)查询慢与重构查询
查看>>
从传统运维到云运维演进历程之软件定义存储(一)
查看>>