zoukankan      html  css  js  c++  java
  • Quartz在.Net网站中的使用方法(附Demo)

    现在做一个B/S项目需要用到计划任务,本来想自定写一个的,写了几句,突然想看看网上有没有现成可以用的. 结果在苦寻之下找到了Quartz这个组件.看过之后感觉还不错.决定用它实现计划任务了. 再找找看有没有现成的任务.但找了大半天.大多数都是C/S结构中用的.

    于是就把自已的写的Demo放到网上,供大家参考一下,如有不正确之 处,还请大家多多指教!

    第一步: 引用三个dll文件:Nullables.dll,Quartz.dll,Common.Logging.dll 没有引用Common.Logging.dll出出错.也没多看,大家可以看一下为什么!

    第二步:

    配置Web.Config文件

    1. <configSections>  
    2.     <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
    3.     <sectionGroup name="common">  
    4.       <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />  
    5.     </sectionGroup>  
    6.   </configSections>  
    7.   
    8.   <common>  
    9.     <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.   
    19.   <quartz>  
    20.     <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler" />  
    21.   
    22.     <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />  
    23.     <add key="quartz.threadPool.threadCount" value="10" />  
    24.     <add key="quartz.threadPool.threadPriority" value="2" />  
    25.   
    26.     <add key="quartz.jobStore.misfireThreshold" value="60000" />  
    27.     <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />  
    28.   </quartz>  
    第三步: 在页面上新建两个按钮:
    第一个按钮执行简单的计划任务 如:几秒钟执行几次
    第一个按钮执行复杂的计划任务 如:每天的夜间2:00执行一次,这种复杂的任务

    在简单按钮单击事件,代码如下:

     

    1. ISchedulerFactory sf = new StdSchedulerFactory();  
    2.             IScheduler sched = sf.GetScheduler();  
    3.             JobDetail job = new JobDetail("job2""group2"typeof(JobExecute_2));  
    4.             SimpleTrigger trigger = new SimpleTrigger("trigger2""group2");//不同的计划任务,trigger名称不可以相同!  
    5.             trigger.StartTime = DateTime.Now.AddSeconds(5);  
    6.             trigger.RepeatInterval = 5000;  
    7.             trigger.RepeatCount = 1000;  
    8.             DateTime ft = sched.ScheduleJob(job, trigger);  
    9.             sched.Start();  
    JobExecute_2这个类就是要执行的具体任务,必继继承Ijob这个接口

     

    代码:

     

    1. public class JobExecute_2:IJob  
    2.    {  
    3.        #region IJob 成员  
    4.        private static int n = 0;  
    5.        public void Execute(JobExecutionContext context)  
    6.        {  
    7.            ILog log = LogManager.GetLogger(typeof(JobExecute_2));  
    8.              
    9.            StreamWriter w = null;  
    10.            try  
    11.            {  
    12.                n++;  
    13.                w = new StreamWriter("D:\\2.txt"true, System.Text.Encoding.UTF8);  
    14.                w.WriteLine("------------------------------------");  
    15.                w.WriteLine(n+" JobExecute_1正执行:时间:" + DateTime.Now);  
    16.                w.WriteLine("------------------------------------");  
    17.                  
    18.            }  
    19.            finally  
    20.            {  
    21.                if (w != null)  
    22.                {  
    23.                    w.Close();  
    24.                    w.Dispose();  
    25.                }  
    26.            }  
    27.        }  
    28.  
    29.        #endregion  
    30.    }  
    复杂任务计划如下:

     

    按钮单击事件:

     

    1. ISchedulerFactory sf = new StdSchedulerFactory();  
    2.            IScheduler sched = sf.GetScheduler();  
    3.            JobDetail job = new JobDetail("job1""group1"typeof(JobExecute_1));  
    4.            CronTrigger trigger = new CronTrigger("trigger1""group1""job1""group1");  
    5.            //二十秒执行一次  
    6.            trigger.CronExpressionString = "0/20 * * * * ?";  
    7.            sched.AddJob(job, true);  
    8.            DateTime ft = sched.ScheduleJob(trigger);  
    9.            sched.Start();  
    1. JobExecute_1类具体代码:  
    2. <pre name="code" class="csharp"private static int i = 0;  
    3.         public void Execute(JobExecutionContext context)  
    4.         {  
    5.             StreamWriter w = null;  
    6.             try  
    7.             {  
    8.                 i++;  
    9.                 w = new StreamWriter("D:\\1.txt"true, System.Text.Encoding.UTF8);  
    10.                 w.WriteLine("------------------------------------");  
    11.                 w.WriteLine(i+" JobExecute_1正执行:时间:" + DateTime.Now);  
    12.                 w.WriteLine("------------------------------------");  
    13.                  
    14.             }  
    15.             finally  
    16.             {  
    17.                 w.Close();  
    18.                 w.Dispose();  
    19.             }  
    20.         }</pre><br>  
    21. <br>  
    22. <p></p>  
    23. <pre></pre>  
    24. <br>  
    25. 好了.到这里就大功告成了!  
    26. <p></p>  
    27. <p>可以运行一下试试啊!这样会定时在D盘根目录下1.txt和2.txt文件中写下日 志了!快快试试吧!</p>  
    28. <p><a target="_blank" href="http://download.csdn.net/detail/wanzhuan2010/3597292">源码下载</a><br>  
    29. </p>  
    30. <p>还有一些具本的使用方法及介绍可以参考:</p>  
    31. <p><a target="_blank" href="http://www.cnblogs.com/shanyou/archive/2007/09/04/881935.html">http://www.cnblogs.com/shanyou/archive/2007/09/04/881935.html<br>  
    32. </a></p>  
    33. <p><br>  
    34. </p>  
    35. <br>  

     

     
  • 相关阅读:
    测试驱动开发的意义何在
    Web自动化测试模式page object的小利器:gizmo
    在NANT使用Nunit2标签运行Nunit测试
    小试牛刀 Ruby on Rails
    敏捷回顾会议的思考
    ThoughtWorks技术校园行第二波 课程资料 CleanCode&DirtyCode
    从git merge 和 git rebase想到……
    Ruby中的深浅拷贝
    NUnit Extension小介绍
    如何写好的测试呢?
  • 原文地址:https://www.cnblogs.com/mili3/p/3088211.html
Copyright © 2011-2022 走看看