Quartz.net 2.0的使用说明
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于WinForm和ASP.NET应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而 创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。
好了,现在具体来说一下怎么使用Quartz.net 2.0。
1.到网上下载Quartz.net 2.0,下载完后解压,里面有vs.net2008和vs.net2010两个版本。
2.新建一个空项目,在里面增加一个类库应用程序和web应用程序,由于我经常是应用在的asp.net web应用程序中。
3.在web应用程序中引用Quartzdll程序集(你下载的Quartz.net 2.0有)
4.在类库应用程序中新建一个测试类和一个测试方法。
5.在web应用程序默认的defalut.asp.cs文件中实现 IJob,然后实现 IJob的Execute方法,在实现方法中写上你调用的类库应用程序的测试方法。
6.在web.config文件中加入下面的代码:
01 |
< configSections > |
02 |
< section name = "quartz" type = "System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" /> |
03 |
< sectionGroup name = "common" > |
04 |
< section name = "logging" type = "Common.Logging.ConfigurationSectionHandler, Common.Logging" /> |
05 |
</ sectionGroup > |
06 |
|
07 |
</ configSections > |
08 |
< common > |
09 |
< logging > |
10 |
< factoryAdapter type = "Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging" > |
11 |
< arg key = "showLogName" value = "true" /> |
12 |
< arg key = "showDataTime" value = "true" /> |
13 |
< arg key = "level" value = "DEBUG" /> |
14 |
< arg key = "dateTimeFormat" value = "HH:mm:ss:fff" /> |
15 |
</ factoryAdapter > |
16 |
</ logging > |
17 |
</ common > |
18 |
< quartz > |
19 |
< add key = "quartz.scheduler.instanceName" value = "ExampleDefaultQuartzScheduler" /> |
20 |
21 |
< add key = "quartz.threadPool.type" value = "Quartz.Simpl.SimpleThreadPool, Quartz" /> |
22 |
< add key = "quartz.threadPool.threadCount" value = "10" /> |
23 |
< add key = "quartz.threadPool.threadPriority" value = "2" /> |
24 |
25 |
< add key = "quartz.jobStore.misfireThreshold" value = "60000" /> |
26 |
< add key = "quartz.jobStore.type" value = "Quartz.Simpl.RAMJobStore, Quartz" /> |
27 |
</ quartz > |
7.在web应用程序中增加Global.asax文件,在Application_Start方法中加入下面的代码:
01 |
Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(); |
02 |
sched = sf.GetScheduler(); |
03 |
sched.Start(); |
04 |
JobKey jobkey = new JobKey( "myjob" , "mygroup" ); |
05 |
IJobDetail job = JobBuilder.Create<Test.TestExcute>().WithIdentity(jobkey).Build(); |
06 |
//ITrigger trigger = TriggerBuilder.Create().StartNow().Build(); |
07 |
//比较复杂的应用 |
08 |
//IOperableTrigger trigger = new CronTriggerImpl("trigName", "group1", "0/2 * * * * ?"); |
09 |
//简单方式 |
10 |
SimpleTriggerImpl trigger = new SimpleTriggerImpl( "simpleTrig" , "simpleGroup" , 10, DateTime.Now.AddSeconds(5) - DateTime.Now); |
11 |
sched.ScheduleJob(job, trigger); |
8.在Application_Start方法中加入下面的代码:
1 |
// 在应用程序关闭时运行的代码 |
2 |
if (sched != null ) |
3 |
{ |
4 |
sched.Shutdown( true ); |
5 |
} |
ok,到现在为止就可以启动你的应用程序试试了。
注意:每次调试时,要重启一下应用服务器。
关于时间设置的一些相关内容,引用自:http://www.cnblogs.com/shanyou/archive/2007/09/04/881935.html,如下:
Quartz.NET
设计者做了一个设计选择来从调度分离开作业。Quartz.NET中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用
的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。
典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要CronTrigger。
CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger。正如它的名字所暗示的那样,CronTrigger是基于Unix克隆表达式的。
Cron表达式被用来配置CronTrigger实例。Cron表达式是一个由7个子表达式组成的字符串。每个子表达式都描述了一个单独的日程细节。这些子表达式用空格分隔,分别表示:
1. Seconds 秒
2. Minutes 分钟
3. Hours 小时
4. Day-of-Month 月中的天
5. Month 月
6. Day-of-Week 周中的天
7. Year (optional field) 年(可选的域)
一个cron表达式的例子字符串为"0 0 12 ? * WED",这表示“每周三的中午12:00”。
单个子表达式可以包含范围或者列表。例如:前面例子中的周中的天这个域(这里是"WED")可以被替换为"MON-FRI", "MON, WED, FRI"或者甚至"MON-WED,SAT"。
通配符('*')可以被用来表示域中“每个”可能的值。因此在"Month"域中的*表示每个月,而在Day-Of-Week域中的*则表示“周中的每一天”。
所
有的域中的值都有特定的合法范围,这些值的合法范围相当明显,例如:秒和分域的合法值为0到59,小时的合法范围是0到23,Day-of-Month中
值得合法凡范围是0到31,但是需要注意不同的月份中的天数不同。月份的合法值是0到11。或者用字符串JAN,FEB MAR, APR, MAY,
JUN, JUL, AUG, SEP, OCT, NOV
及DEC来表示。Days-of-Week可以用1到7来表示(1=星期日)或者用字符串SUN, MON, TUE, WED, THU, FRI
和SAT来表示.
'/'字符用来表示值的增量,例如, 如果分钟域中放入'0/15',它表示“每隔15分钟,从0开始”,如果在份中域中使用'3/20',则表示“小时中每隔20分钟,从第3分钟开始”或者另外相同的形式就是'3,23,43'。
'?'字符可以用在day-of-month及day-of-week域中,它用来表示“没有指定值”。这对于需要指定一个或者两个域的值而不需要对其他域进行设置来说相当有用。
'L'
字符可以在day-of-month及day-of-week中使用,这个字符是"last"的简写,但是在两个域中的意义不同。例如,在day-of-
month域中的"L"表示这个月的最后一天,即,一月的31日,非闰年的二月的28日。如果它用在day-of-week中,则表示"7"或
者"SAT"。但是如果在day-of-week域中,这个字符跟在别的值后面,则表示"当月的最后的周XXX"。例如:"6L" 或者
"FRIL"都表示本月的最后一个周五。当使用'L'选项时,最重要的是不要指定列表或者值范围,否则会导致混乱。
'W' 字符用来指定距离给定日最接近的周几(在day-of-week域中指定)。例如:如果你为day-of-month域指定为"15W",则表示“距离月中15号最近的周几”。
'#'表示表示月中的第几个周几。例如:day-of-week域中的"6#3" 或者 "FRI#3"表示“月中第三个周五”。
作为一个例子,下面的Quartz.NET克隆表达式将在星期一到星期五的每天上午10点15分执行一个作业。
0 15 10 ? * MON-FRI
下面的表达式
0 15 10 ? * 6L 2007-2010
将在2007年到2010年的每个月的最后一个星期五上午10点15分执行作业。你不可能用SimpleTrigger来做这些事情。你可以用两者之中的任何一个,但哪个跟合适则取决于你的调度需要。
Quartz.net 2.0的使用说明的更多相关文章
- Quartz.NET 3.0 正式发布
Quartz.NET是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个作业而创建简单的或复杂的作业调度.它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等.在2017 ...
- Quartz 2.3.0 升级感受
Quartz 2.3.0 发布,Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简 ...
- Quartz.NET 3.0.7 + MySql 实现动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一)
原文:Quartz.NET 3.0.7 + MySql 实现动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一) 前端时间,接到领导任务,写了一个调度框架.今天决定把心路历程记 ...
- 关于Quartz .NET(V3.0.7)的简要说明
目录 0. 任务调度 1. Quartz .NET 1.1 基本概念 1.2 主要接口和对象 2. 使用示例 2.0 准备工作 2.1 每间隔一定时间间隔执行一次任务 2.3 某天的固定时间点执行任务 ...
- 作业调度框架 Quartz.NET 2.0 StepByStep
注:目前网上诸多介绍Quartz.net的文章,甚至Quartz.net官网上的Tutorial都是1.0版本的,而这个项目在2.0版本对项目进行了比较大规模的修改,使得原有的很多例子都不能运行,故写 ...
- Spring 4.2.5 + Quartz 2.2.0整合
jar包使用的Maven库管理的,在这就不罗列了,注意下只有spring3.x以上的版本才支持quartz2.x的版本. 配置文件: <?xml version="1.0" ...
- c# .net framework 4.5.2 , Quartz.NET 3.0.7
参考了:https://www.cnblogs.com/personblog/p/11277527.html, https://www.jianshu.com/p/b8e7e4deb60a .NET ...
- React + Springboot + Quartz,从0实现Excel报表自动化
一.项目背景 企业日常工作中需要制作大量的报表,比如商品的销量.销售额.库存详情.员工打卡信息.保险报销.办公用品采购.差旅报销.项目进度等等,都需要制作统计图表以更直观地查阅.但是报表的制作往往需要 ...
- SignalR 2.0 初次使用说明
如何使用SignalR 2.0 一:首先通过Nuget安装SignalR 2.0 [本人使用的时候最新版本为2.0]2.0与之前1.X有部分命名空间和配置不同请注意 二:建一个专门的类库用来负责Sig ...
随机推荐
- Model的绑定
ReflectedControllerDescriptor:ControllerDescriptor Controller的 public override ActionDescriptor Find ...
- 将web项目deploy到tomcat的方法
如果已经把整个项目发布到tomcat的webapps文件夹下,就不用再配置tomcat的server.xml了(也就是不用配置<Context>节点) 并且,你的项目的WEB-INF/li ...
- sql语句的基本操作
建立一个数据库 create DATABASE mydatabase; 建立一张数据表: ##创建一个员工表##create table employee( eid int not NULL PRIM ...
- HDU 4000 Fruit Ninja 树状数组 + 计数
给你N的一个排列,求满足:a[i] < a[k] < a[j] 并且i < j < k的三元组有多少个. 一步转化: 求出所有满足 a[i] < a[k] < a[ ...
- 从SDE库文件手工删除SDE图层(转载)
转载自:http://gis-conquer.blog.sohu.com/164467560.html 一.前言 虽然Catalog能解决这种问题,但是在特殊情况下也许这种方法有点用途. ...
- PHP 增删改查 import!!
主页面 <h1>主页面family</h1> <table width="100%" border="1px" cellpaddi ...
- [51NOD1087]1 10 100 1000(规律,二分)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 用高中的数列知识就可以推出公式,不难发现f(n)=f(n ...
- JSON 之 SuperObject(6): 方法
SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: IS ...
- poj2942 Knights of the Round Table 双连通分支 tarjan
题解:http://blog.csdn.net/lyy289065406/article/details/6756821 讲的很详细我就不多说了. 题目连接:http://poj.org/proble ...
- 漫游Kafka实战篇之客户端API
Kafka Producer APIs 旧版的Procuder API有两种:kafka.producer.SyncProducer和kafka.producer.async.AsyncProduce ...