• Quartz在.Net网站中的使用方法(附Demo)


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

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

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

    第二步:

    配置Web.Config文件

    [csharp] view plain copy
     
    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执行一次,这种复杂的任务

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

    [csharp] view plain copy
     
    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这个接口

    代码:

    [csharp] view plain copy
     
    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.    }  


    复杂任务计划如下:

    按钮单击事件:

    [csharp] view plain copy
     
    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();  
    [csharp] view plain copy
     
      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>  
      36.      
  • 相关阅读:
    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
    C++笔记(3):一些C++的基础知识点
    机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)
    机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)
    机器学习&数据挖掘笔记_13(用htk完成简单的孤立词识别)
    Deep learning:四十三(用Hessian Free方法训练Deep Network)
    机器学习&数据挖掘笔记_12(对Conjugate Gradient 优化的简单理解)
    Deep learning:四十二(Denoise Autoencoder简单理解)
    Deep learning:四十一(Dropout简单理解)
    算法设计和数据结构学习_6(单链表的递归逆序)
  • 原文地址:https://www.cnblogs.com/zxtceq/p/7299125.html
Copyright © 2020-2023  润新知