现在做一个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. <common>
  8. <logging>
  9. <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging">
  10. <arg key="showLogName" value="true" />
  11. <arg key="showDataTime" value="true" />
  12. <arg key="level" value="DEBUG" />
  13. <arg key="dateTimeFormat" value="HH:mm:ss:fff" />
  14. </factoryAdapter>
  15. </logging>
  16. </common>
  17. <quartz>
  18. <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler" />
  19. <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
  20. <add key="quartz.threadPool.threadCount" value="10" />
  21. <add key="quartz.threadPool.threadPriority" value="2" />
  22. <add key="quartz.jobStore.misfireThreshold" value="60000" />
  23. <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
  24. </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. StreamWriter w = null;
  9. try
  10. {
  11. n++;
  12. w = new StreamWriter("D:\\2.txt", true, System.Text.Encoding.UTF8);
  13. w.WriteLine("------------------------------------");
  14. w.WriteLine(n+" JobExecute_1正执行:时间:" + DateTime.Now);
  15. w.WriteLine("------------------------------------");
  16. }
  17. finally
  18. {
  19. if (w != null)
  20. {
  21. w.Close();
  22. w.Dispose();
  23. }
  24. }
  25. }
  26. #endregion
  27. }

复杂任务计划如下:

按钮单击事件:

  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. finally
    15. {
    16. w.Close();
    17. w.Dispose();
    18. }
    19. }</pre><br>
    20. <br>
    21. <p></p>
    22. <pre></pre>
    23. <br>
    24. 好了.到这里就大功告成了!
    25. <p></p>
    26. <p>可以运行一下试试啊!这样会定时在D盘根目录下1.txt和2.txt文件中写下日 志了!快快试试吧!</p>
    27. <p><a target="_blank" href="http://download.csdn.net/detail/wanzhuan2010/3597292">源码下载</a><br>
    28. </p>
    29. <p>还有一些具本的使用方法及介绍可以参考:</p>
    30. <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>
    31. </a></p>
    32. <p><br>
    33. </p>
    34. <br>

Quartz在.Net网站中的使用方法(附Demo)的更多相关文章

  1. vagrant网站中box下载方法

    假设需要下载Laravel/homestead这个包. 首先定位到地址:https://app.vagrantup.com/laravel/boxes/homestead/versions/8.0.0 ...

  2. 关于linux asp.net MVC网站中 httpHandlers配置无效的处理方法

    近期有Jexus用户反映,在Linux ASP.NET MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404( ...

  3. ASP.NET网站中获取当前虚拟目录的应用程序目录的方法(转)

    [原创]ASP.NET网站中获取当前虚拟目录的应用程序目录的方法 ASP.NET网站中获取当前虚拟目录的应用程序目录的方法1.问题描述:有时候,某个网页控件会被不同目录下文件使用,此时如果该控件中有一 ...

  4. 【前端】向blog或网站中添加语法高亮显示代码方法总结

    向blog或网站中添加语法高亮显示的代码方法总结 文章目录 预备知识 目标 第一类方法:嵌入 第二类方法:外部引用 第三类方法:忽略HTML和PHP 最近在写代码时遇到一个问题,就是如何让代码像在ID ...

  5. 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结

    在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server ...

  6. 利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动

    查看本章节 查看作业目录 需求说明: 利用自定义动画 animate() 方法,实现某图书网站中"近 7 日畅销榜"中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠 ...

  7. PHP获取网站中文章的第一张图片作为缩略图的方法

    调取文章中的第一张图作为列表页缩略图是很流行的做法,WordPress中一般主题默认也是如此,那我们接下来就一起来看看PHP获取网站中各文章的第一张图片的代码示例 $temp=mt_rand(1,4) ...

  8. 针对Linux ASP.NET MVC网站中 httpHandlers配置无效的解决方案

    近期有Linux ASP.NET用户反映,在MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404(找不到网页) ...

  9. [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.         jqGrid和AJAX 5.         GridSettings 6.  ...

随机推荐

  1. bzoj 4026 dC Loves Number Theory 主席树+欧拉函数

    题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源.给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n)代 ...

  2. putchar()和getchar()使用解析

    1.putchar() 作用:输出一个字符 格式:putchar(c),c为输出参数 #include <stdio.h> int main() { char a1='A',b1='B'; ...

  3. localStorage前端存储数据

    <!DOCTYPE html> <html> <head> <title>localStorage演示</title> <meta c ...

  4. python爬虫27 | 当Python遇到MongoDB的时候,存储av女优的数据变得如此顺滑爽~

    上次 我们知道了怎么操作 MySQL 数据库 python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库. MySQL 有些年头了 开源又成熟又牛逼 所以现在很多企业都在使用 MySQL ...

  5. Greek symbols --Latex

    $\propto$     \propto $\infty$   \infty $\ne$   \ne $\approx$     \approx $\sim$ :    \sim  --- same ...

  6. 51NOD 1277 字符串中的最大值(KMP)

    >>点击进入原题测试<< 思路:用KMP优化的暴力写了一遍,超时!没有充分利用KMP中next数组的性质. 首先这个题是肯定要用到KMP算法的,然后会有一个next[]数组. ...

  7. Spring security 5 Authorize Configuration

    1. Spring Security 核心请求,认证配置类 WebSecurityConfigurerAdapter protected void configure(HttpSecurity htt ...

  8. Maven_自动化构建和构建环节

    [构建过程的几个主要环节] ①清理:删除以前的编译结果,为重新编译做好准备. ②编译:将 Java 源程序编译为字节码文件. ③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性 ...

  9. Leetcode 80.删除重复数组的重复项

    删除重复数组的重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间 ...

  10. Linux command2

    . CentOS 想查看哪个port开了,却提示命令无效 # yum -y install net-tools 2. How to install "wget" command i ...