当前位置:编程学习 > asp >>

关于Quartz.net 2.0的使用说明

     Quartz.net是什么我就不详细介绍了,估计来看这篇文章的人都知道是干什么用的。

      昨天部门经理在内部即时通讯上给我发了一个消息,是一个链接地址。好奇的我就打开看了看,原来是一篇关于 Quartz.net介绍的文章。刚看几行就吸引我了,这不是我在项目中经常要定时完成一些操作或者计算用到的吗?

     以前在解决这类问题时,一开始想到的是在asp.net中使用Timer,应用程序启动就计算时间,然后自己执行,但是结果并不如人意,不能正常执行。
    没办法,就想到用window service ,以前也做过类似的,实现起来也比较简单,但是又一个麻烦来了,用window service,部署到服务器上的时候很麻烦,经常少这少那的,配置文件还经常忘记改,为此在部署到服务器上时,心里总是不那么放心。而且,如果安装了window service,有时候还删除不了,那就有得折腾了。经理看到后也觉得麻烦,就说用控制台应用程序。

    用控制台应用程序跟window service 差不多,唯一就是每次要在服务器上打开一个窗口,让程序一直运行下去。到此总还算完美,但是缺点还是每次发布新程序的时候要覆盖程序集和配置文件,还是经常会有忘记更新配置文件的事发生。

    经过这一天的学习,感觉Quartz.net真的是太好了,把之前遇到的这些事情都解决掉了。以后发布新的版本后,重启应用服务器就可以了。
   在这一天的学习中,发现不少问题。
    网上有很多关于这个的介绍和使用,但因为我下载的是Quartz.net 2..0.1,所以在做测试程序的时候总是会有错误。后来到网上查到关于2.0的说明,才知道他与之前的版本有些不同了,很多方法和类都更改了,所以就会报很多莫名其妙的错误。

     好了,现在具体来说一下怎么使用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文件中加入下面的代码:
 

[html]
<configSections> 
    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
    <sectionGroup name="common"> 
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/> 
    </sectionGroup> 
          
</configSections> 
    <common> 
        <logging> 
            <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging"> 
                <arg key="showLogName" value="true"/> 
                <arg key="showDataTime" value="true"/> 
                <arg key="level" value="DEBUG"/> 
                <arg key="dateTimeFormat" value="HH:mm:ss:fff"/> 
            </factoryAdapter> 
        </logging> 
    </common> 
  <quartz> 
    <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/> 
 
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/> 
    <add key="quartz.threadPool.threadCount" value="10"/> 
    <add key="quartz.threadPool.threadPriority" value="2"/> 
 
    <add key="quartz.jobStore.misfireThreshold" value="60000"/> 
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/> 
  </quartz> 
 7.在web应用程序中增加Global.asax文件,在Application_Start方法中加入下面的代码:
[csharp] 
Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory(); 
        sched = sf.GetScheduler(); 
        sched.Start(); 
        JobKey jobkey = new JobKey("myjob", "mygroup"); 
        IJobDetail job = JobBuilder.Create<Test.TestExcute>().WithIdentity(jobkey).Build(); 
        //ITrigger trigger = TriggerBuilder.Create().StartNow().Build(); 
        //比较复杂的应用 
        //IOperableTrigger trigger = new CronTriggerImpl("trigName", "group1", "0/2 * * * * ?"); 
        //简单方式 
        SimpleTriggerImpl trigger = new SimpleTriggerImpl("simpleTrig", "simpleGroup", 10, DateTime.Now.AddSeconds(5) - DateTime.Now); 
        sched.ScheduleJob(job, trigger);  

8.在Application_Start方法中加入下面的代码:
[csharp] 
//   在应用程序关闭时运行的代码 
        if (sched != null) 
        { 
           sched.Shutdown(true); 
        } 
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) 年(可选的域)

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,