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方法中加入下面的代码:

01Quartz.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来做这些事情。你可以用两者之中的任何一个,但哪个跟合适则取决于你的调度需要。

转载于:https://www.cnblogs.com/tonykan/p/3467398.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android View滚动、拉伸到顶/底部弹性回弹复位

&#xfeff;&#xfeff;《Android View滚动、拉伸到顶/底部弹性回弹复位》 我在上一篇文章介绍了如何实现一个Android ListView拉到顶/底部后&#xff0c;像橡皮筋一样弹性回弹复位&#xff08;《Android ListView拉到顶/底部&#xff0c;像橡皮筋一样弹性回弹复位》&#xf…

JavaScript If...Else 语句

条件语句用于基于不同的条件来执行不同的动作。 条件语句 通常在写代码时&#xff0c;您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。 在 JavaScript 中&#xff0c;我们可使用以下条件语句&#xff1a; if 语句 - 只有当指定条件为 true …

使用手机游戏的新闻推送

使用手机游戏的新闻推送——WeCloud 团队 消息推送是游戏开发人员与玩家沟通最直接的桥梁。开发人员能够通过推送一条消息直观地在手机屏幕上把信息传达给玩家。可是因为开发人员一些不恰当推送或者对于推送细节的疏忽大意&#xff0c;使得大多数的玩家都选择了彻底关闭推送消息…

Python -- post方式上传文件

说明 使用第三方库Request&#xff0c;安装方法为&#xff1a; pip install requests 具体安装方法参考http://docs.python-requests.org/en/master/user/install/。 代码 import requestsurl http://127.0.0.1/upload files {file: open(D:/test.apk, rb)} da…

WeakReference与SoftReference

WeakReference与SoftReference都可以用来保存对象的实例引用&#xff0c;这两个类与垃圾回收有关。 WeakReference是弱引用&#xff0c;其中保存的对象实例可以被GC回收掉。这个类通常用于在某处保存对象引用&#xff0c;而又不干扰该对象被GC回收&#xff0c;通常用于Debug、内…

TCP是如何保证包的顺序传输

转自&#xff1a;http://blog.csdn.net/ggxxkkll/article/details/7894112 大家都知道&#xff0c;TCP提供了最可靠的数据传输&#xff0c;它给发送的每个数据包做顺序化&#xff08;这看起来非常烦琐&#xff09;&#xff0c;然而&#xff0c;如果TCP没有这样烦琐的操作&#…

Python文件上传功能简单实现

本文章代码上传在码云上 代码地址 gitgitee.com:DanYuJie/upanddown.git这里我们使用flask框架&#xff0c;简单实用 目录结构&#xff1a; upandown/static/css/js/jquery.min.jstoastr.min.jstemplates/index.htmltest.py 首先我们需要一个页面在templates/index.html(…

Arduino 端口通信实例

// //Arduino 1.0.x-----Arduino Uno----COM9 //使用3-10号引脚连接8个LED // int incomingByte 0; //输入的数据存储变量 int count1; void setup() {Serial.begin(9600);// opens serial port, sets data rate to 9600 bpsfor(int i3;i<10;i)//打开3-10号引脚pinMode(i…

redhat6.4 安装oracle 10g error

环境&#xff1a;操作系统:redhat6.4 64位数据库版本:10.2.0.4 64位搭建测试原因&#xff1a;http://718693.blog.51cto.com/708693/1682945说明&#xff1a;在redhat6.4上安装10.2.0.1 64位接着再升级到10.2.0.4 64位&#xff0c;在执行DBCA报如下错误UnsatisfiedLinkError ex…

sha256---利用java自带的实现加密

利用java自带的实现加密&#xff1a;参考https://jingyan.baidu.com/article/2fb0ba40a2ef2b00f3ec5f74.html /*** 利用java原生的摘要实现SHA256加密* param str 加密后的报文* return*/public static String getSHA256StrJava(String str){MessageDigest messageDigest;Stri…

Flask文件上传

https://zhuanlan.zhihu.com/p/23731819 Flask文件上传&#xff08;一&#xff09;&#xff1a;原生实现 李辉 greyli.com 87 人赞同了该文章 文件上传是个躲不掉的问题&#xff0c;用户头像&#xff0c;文章图片&#xff0c;文件分享等等都需要上传功能。但这里涉及很多内…

Python匿名函数——lambda表达式

如果要定义的函数很简单&#xff0c;一个return语句就能搞定&#xff0c;可以使用lambda表达式来定义&#xff0c; lambda表达式的语法如下&#xff1a; lambda parameters: expressionlambda表达式并不包含return语句&#xff0c;凡是使用函数作为参数或返回值的地方&#xff…

jQuery实现radio第一次点击选中第二次点击取消功能(转)

转载自&#xff1a;http://www.jb51.net/article/113730.htm 由于项目的需求&#xff0c;要求radio点击两次后为取消状态&#xff0c;不方便修改为checkbox&#xff0c;可以用正面的方法实现。 // jquery$(input:radio).click(function(){//alert(this.checked);//var $radio …

简单编码

将一串文本译成密码&#xff0c;密码的规律是&#xff1a; 将原来的小写字母全部翻译成大写字母&#xff0c;大写字母全部翻译成小写字母&#xff0c;数字的翻译规律如下&#xff1a; 0——>9 1——>8 2——>7 3——>6 4——>5 5——>4 6——>3 7——>…

QCon上海2015热点前瞻:Uber伸缩之道、注重实效的性能

QCon上海2015将于10月15日~17日举行。8月16日前报名&#xff0c;可享受8折优惠。\\本次大会设计了15个热点技术专题&#xff0c;涵盖大数据、架构、移动开发、产品设计、安全、团队建设、技术创业等热点话题。我们将邀请业界知名专家&#xff0c;分享他们的实践经验。目前已经确…

工具配置链接

一、idea运行eclipse和myeclipse项目 二、idea中git的使用 三、idea快捷键 转载于:https://www.cnblogs.com/javabeginer/p/7515071.html

C 文件读写 容易疏忽的一个问题

今天需要解决一个问题&#xff0c;将影像瓦片&#xff08;一堆jpg文件&#xff09;分别进行读取&#xff0c;并将所有数据以文件流的方式存入一个.db的文件中&#xff0c; 同时将每个jpg数据在db文件中的位置保存下来&#xff0c;作为index存在.idx文件中。 其中部分代码如下&a…

LNMP里常见的502问题

讲关于nginx的高级配置&#xff0c;在Apache讲了很多关于“用户认证”、“日志”、“重定向”等等操作&#xff0c;当然nginx也会有相同的操作。首先&#xff0c;我们把Discuz在Nginx下实现访问&#xff0c;用之前的域名www.test.com进入目录[rootLampLinux vhosts]# cd /usr/l…

python学习过程中随手写的测试脚本-testloop.py

## 定义list数组lstrs [t1,t2,t3,t4]print(lstrs is,lstrs) i 0## test for loopfor lstr in lstrs: print(lstrs[%d] is % i,lstr ) i i 1print(end for loop) j 0## test while loopwhile j < 3: print(lstrs[%d] is % j,lstrs[j] ) j j 1print(end while loop) k …

jQuery以JSONP的访问调用一个WCF REST服务

JSONP&#xff08;JSON with Padding&#xff09;可以看成是JSON的一种“使用模式”&#xff0c;用以解决“跨域访问”的问题. 下面是一个简单的例子用于模拟如何通过jQuery以JSONP的访问调用一个WCF REST服务。 在这个例子中&#xff0c;我们将定义一个用于返回所有员工信息的…