Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。
官网:http://www.quartz-scheduler.net/
文档:http://www.quartz-scheduler.net/documentation/index.html
下载:http://www.quartz-scheduler.net/download.html
参考:http://www.cnblogs.com/jys509/p/4628926.html

1. 新建一个控制台项目QuartzDemo,引用Topshelf、Log4net和Quartz。

  1. Install-Package Topshelf
  2. Install-Package Topshelf.Log4Net
  3. Install-Package Quartz

2. 修改相关文件。
Program.cs:

  1. using System;
  2. using System.IO;
  3. using log4net;
  4. using log4net.Config;
  5. using Quartz;
  6. using Quartz.Impl;
  7. using Topshelf;
  8.  
  9. namespace QuartzDemo
  10. {
  11. class Program
  12. {
  13. public static void Main()
  14. {
  15. var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.xml");
  16. XmlConfigurator.ConfigureAndWatch(logCfg);
  17.  
  18. HostFactory.Run(x =>
  19. {
  20. x.UseLog4Net();
  21. x.Service<QuartzService>();
  22. x.RunAsLocalSystem();
  23.  
  24. x.SetDescription("Quartz Service");
  25. x.SetDisplayName("QuartzService");
  26. x.SetServiceName("QuartzService");
  27.  
  28. x.EnablePauseAndContinue();
  29. });
  30. }
  31. }
  32.  
  33. public sealed class QuartzService : ServiceControl, ServiceSuspend
  34. {
  35. private readonly IScheduler scheduler;
  36.  
  37. public QuartzService()
  38. {
  39. scheduler = StdSchedulerFactory.GetDefaultScheduler();
  40. }
  41.  
  42. public bool Start(HostControl hostControl)
  43. {
  44. scheduler.Start();
  45. return true;
  46. }
  47.  
  48. public bool Stop(HostControl hostControl)
  49. {
  50. scheduler.Shutdown(false);
  51. return true;
  52. }
  53.  
  54. public bool Continue(HostControl hostControl)
  55. {
  56. scheduler.ResumeAll();
  57. return true;
  58. }
  59.  
  60. public bool Pause(HostControl hostControl)
  61. {
  62. scheduler.PauseAll();
  63. return true;
  64. }
  65. }
  66.  
  67. public sealed class TestJob : IJob
  68. {
  69. private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob));
  70.  
  71. public void Execute(IJobExecutionContext context)
  72. {
  73. _logger.InfoFormat("TestJob测试");
  74. }
  75. }
  76. }

log4net.xml:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <log4net>
  3. <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  4. <!--日志路径-->
  5. <param name= "File" value= "Logs\"/>
  6. <!--是否是向文件中追加日志-->
  7. <param name= "AppendToFile" value= "true"/>
  8. <!--log保留天数-->
  9. <param name= "MaxSizeRollBackups" value= "10"/>
  10. <!--日志文件名是否是固定不变的-->
  11. <param name= "StaticLogFileName" value= "false"/>
  12. <!--日志文件名格式为:2008-08-31.log-->
  13. <param name= "DatePattern" value= "yyyy-MM-dd&quot;.log&quot;"/>
  14. <!--日志根据日期滚动-->
  15. <param name= "RollingStyle" value= "Date"/>
  16. <layout type="log4net.Layout.PatternLayout">
  17. <param name="ConversionPattern" value="[%d] [%p] [%c] - %m%n" />
  18. </layout>
  19. </appender>
  20.  
  21. <!-- 控制台前台显示日志 -->
  22. <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
  23. <mapping>
  24. <level value="ERROR" />
  25. <foreColor value="Red, HighIntensity" />
  26. </mapping>
  27. <mapping>
  28. <level value="Info" />
  29. <foreColor value="Green" />
  30. </mapping>
  31. <layout type="log4net.Layout.PatternLayout">
  32. <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
  33. </layout>
  34.  
  35. <filter type="log4net.Filter.LevelRangeFilter">
  36. <param name="LevelMin" value="Info" />
  37. <param name="LevelMax" value="Fatal" />
  38. </filter>
  39. </appender>
  40.  
  41. <root>
  42. <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
  43. <level value="all" />
  44. <appender-ref ref="ColoredConsoleAppender"/>
  45. <appender-ref ref="RollingLogFileAppender"/>
  46. </root>
  47. </log4net>

quartz.config:

  1. # You can configure your scheduler in either <quartz> configuration section
  2. # or in quartz properties file
  3. # Configuration section has precedence
  4.  
  5. quartz.scheduler.instanceName = QuartzTest
  6.  
  7. # configure thread pool info
  8. quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
  9. quartz.threadPool.threadCount = 10
  10. quartz.threadPool.threadPriority = Normal
  11.  
  12. # job initialization plugin handles our xml reading, without it defaults are used
  13. quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
  14. quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
  15.  
  16. # export this server to remoting context
  17. #quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
  18. #quartz.scheduler.exporter.port = 555
  19. #quartz.scheduler.exporter.bindName = QuartzScheduler
  20. #quartz.scheduler.exporter.channelType = tcp
  21. #quartz.scheduler.exporter.channelName = httpQuartz

quartz_jobs.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
  4.  
  5. <processing-directives>
  6. <overwrite-existing-data>true</overwrite-existing-data>
  7. </processing-directives>
  8.  
  9. <schedule>
  10.  
  11. <job>
  12. <name>TestJob</name>
  13. <group>Test</group>
  14. <description>TestJob测试</description>
  15. <job-type>QuartzDemo.TestJob, QuartzDemo</job-type>
  16. <durable>true</durable>
  17. <recover>false</recover>
  18. </job>
  19. <trigger>
  20. <cron>
  21. <name>TestJobTrigger</name>
  22. <group>Test</group>
  23. <job-name>TestJob</job-name>
  24. <job-group>Test</job-group>
  25. <start-time>2015-01-22T00:00:00+08:00</start-time>
  26. <cron-expression>0/3 * * * * ?</cron-expression>
  27. </cron>
  28. </trigger>
  29.  
  30. </schedule>
  31.  
  32. </job-scheduling-data>

3. 执行,在控制台和日志文件中每3秒钟显示一条测试信息:

注意,log4net.xml、quartz.config、quartz_jobs.xml,这几个文件要选择“复制”:

Quartz.NET管理周期性任务的更多相关文章

  1. (转)Quartz.NET管理类

    最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下. public class QuartzManager<T> where T : class,IJob ...

  2. Quartz.NET管理类

    最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下. public class QuartzManager<T> where T : class,IJob ...

  3. Quartz JobStore管理Job

    Quartz提供了RAMJobStore和JDBC JobStore两种方式用来Job,RAMJobStore将Job任务存入内存中,速度快:JobStore采用数据库的方式管理中,本文介绍JobSt ...

  4. 自开发实现Quartz Web管理

    网上能找到的QuartzWeb管理的资料都是使用的一个国外人写的Quartz WebApp的东东.功能也非常全面. 可是作为自己的应用其有用不了那么多功能,一般我们仅仅要能够定义一个job,指定一个C ...

  5. quartz详解4:quartz线程管理

    http://blog.itpub.NET/11627468/viewspace-1766967/ quartz启动后有多个线程同时在跑.启动时会启动主线程.集群线程.检漏线程.工作线程.主线程负责查 ...

  6. SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源码

    页面展现 后台任务处理:恢复任务 15s执行一次后台打印消息 不BB了,直接上代码 import... /** * 调度工厂类 * Created by jinyu on 2018/4/14/014. ...

  7. .net core quartz job作业调度管理组件

    定时作业对于多数系统来说,都会用到,定时作业的实现方式可以有多种方式,简单的方式用Timer就可以实现,但是达不到通用的效果,本文采用Quartz基础组件来搭建一套企业通用的作业调度管理服务,希望对于 ...

  8. Quartz与Spring整合进行热部署的实现(二)

    Spring的org.springframework.scheduling.quartz.JobDetailBean提供Job可序列化的实现(具体实现可查看源码) 此时.我们原来的job就可以继承Qu ...

  9. (5)Quartz学习

    原文:http://blog.csdn.net/zxl315/article/details/10879927 介绍Quartz Quartz是一个开源的任务调度系统,它能用来调度很多任务的执行. 运 ...

随机推荐

  1. w3school一个学习编程的好地方!

    http://www.w3school.com.cn/index.html 每天过来学习几篇.

  2. 对比Linux系统和Windows系统哪个更好

    最近半年来,我一直在读一本叫做<Linux就该这么学>的Linux教材,确实让我进步的很快,也慢慢的让Linux系统走入了我的知识认知中,那么学习前我们来对比下Windows和Linux的 ...

  3. NetworkReachable学习笔记

    一.基本知识 在需要联网的iPhone程序中,我们首先需要检查网络的状态,如果不能连接网络则告诉用户程序不能使用的原因是没有网络连接.在iPhone的SystemConfiguration框架里有提供 ...

  4. HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )

    题意:给定一个环形字符串,让他把它分成k份,使得最大的字典序 最小. 思路:二分答案,首先很明显答案所有可能是 n*n种  排序可以先求出最长公共前缀,这样比较就只需要比较公共前缀的下一位就能比较出两 ...

  5. SparkSQL之旅

    1.准备数据employee.txt ,Gong Shaocheng, ,Li Dachao, ,Qiu Xin, ,Cheng Jiangzhong, ,Wo Binggang, 将数据放入hdfs ...

  6. 当一个activity中按钮过多时怎么办?

    这几天看极客学院的视频,跟视频中的老师学到的一些小技巧~~ .setOnClickListener(this) 通过重写this(我猜的是重写),下面有onClicked() package exam ...

  7. 2016年12-09php函数

    php函数 函数名,参数列表,函数体 php时弱类型语言返回类型可以没有function 函数名(){} 1.简单函数四要素:返回类型,函数名,参数列表,函数体 function Show(){ ec ...

  8. thrift编译安装

    关于thrift的介绍:http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/ Apache Thrift 是 Facebook 实现 ...

  9. fastqc, Per Base Sequence Content

    Per Base Sequence Content对所有reads的每一个位置,统计ATCG四种碱基(正常情况)的分布: 横轴为位置,纵轴为百分比. 正常情况下四种碱基的出现频率应该是接近的,而且没有 ...

  10. 今天<人人都能弹吉他>免费版获得了苹果的新品推荐

    今天改了一天程序, 来回测来回改, 准备提交一个新版本了. 傍晚跑步回来, 看了一下今天的下载量, 竟然比昨天多了. 然后就想, 难不成被苹果推荐了? 上线一看, 果然, 而且美国和中国两大市场都在新 ...