Quartz.NET管理周期性任务
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。
- Install-Package Topshelf
- Install-Package Topshelf.Log4Net
- Install-Package Quartz
2. 修改相关文件。
Program.cs:
- using System;
- using System.IO;
- using log4net;
- using log4net.Config;
- using Quartz;
- using Quartz.Impl;
- using Topshelf;
- namespace QuartzDemo
- {
- class Program
- {
- public static void Main()
- {
- var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.xml");
- XmlConfigurator.ConfigureAndWatch(logCfg);
- HostFactory.Run(x =>
- {
- x.UseLog4Net();
- x.Service<QuartzService>();
- x.RunAsLocalSystem();
- x.SetDescription("Quartz Service");
- x.SetDisplayName("QuartzService");
- x.SetServiceName("QuartzService");
- x.EnablePauseAndContinue();
- });
- }
- }
- public sealed class QuartzService : ServiceControl, ServiceSuspend
- {
- private readonly IScheduler scheduler;
- public QuartzService()
- {
- scheduler = StdSchedulerFactory.GetDefaultScheduler();
- }
- public bool Start(HostControl hostControl)
- {
- scheduler.Start();
- return true;
- }
- public bool Stop(HostControl hostControl)
- {
- scheduler.Shutdown(false);
- return true;
- }
- public bool Continue(HostControl hostControl)
- {
- scheduler.ResumeAll();
- return true;
- }
- public bool Pause(HostControl hostControl)
- {
- scheduler.PauseAll();
- return true;
- }
- }
- public sealed class TestJob : IJob
- {
- private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob));
- public void Execute(IJobExecutionContext context)
- {
- _logger.InfoFormat("TestJob测试");
- }
- }
- }
log4net.xml:
- <?xml version="1.0" encoding="utf-8" ?>
- <log4net>
- <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
- <!--日志路径-->
- <param name= "File" value= "Logs\"/>
- <!--是否是向文件中追加日志-->
- <param name= "AppendToFile" value= "true"/>
- <!--log保留天数-->
- <param name= "MaxSizeRollBackups" value= "10"/>
- <!--日志文件名是否是固定不变的-->
- <param name= "StaticLogFileName" value= "false"/>
- <!--日志文件名格式为:2008-08-31.log-->
- <param name= "DatePattern" value= "yyyy-MM-dd".log""/>
- <!--日志根据日期滚动-->
- <param name= "RollingStyle" value= "Date"/>
- <layout type="log4net.Layout.PatternLayout">
- <param name="ConversionPattern" value="[%d] [%p] [%c] - %m%n" />
- </layout>
- </appender>
- <!-- 控制台前台显示日志 -->
- <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
- <mapping>
- <level value="ERROR" />
- <foreColor value="Red, HighIntensity" />
- </mapping>
- <mapping>
- <level value="Info" />
- <foreColor value="Green" />
- </mapping>
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
- </layout>
- <filter type="log4net.Filter.LevelRangeFilter">
- <param name="LevelMin" value="Info" />
- <param name="LevelMax" value="Fatal" />
- </filter>
- </appender>
- <root>
- <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
- <level value="all" />
- <appender-ref ref="ColoredConsoleAppender"/>
- <appender-ref ref="RollingLogFileAppender"/>
- </root>
- </log4net>
quartz.config:
- # You can configure your scheduler in either <quartz> configuration section
- # or in quartz properties file
- # Configuration section has precedence
- quartz.scheduler.instanceName = QuartzTest
- # configure thread pool info
- quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
- quartz.threadPool.threadCount = 10
- quartz.threadPool.threadPriority = Normal
- # job initialization plugin handles our xml reading, without it defaults are used
- quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
- quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
- # export this server to remoting context
- #quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
- #quartz.scheduler.exporter.port = 555
- #quartz.scheduler.exporter.bindName = QuartzScheduler
- #quartz.scheduler.exporter.channelType = tcp
- #quartz.scheduler.exporter.channelName = httpQuartz
quartz_jobs.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
- <processing-directives>
- <overwrite-existing-data>true</overwrite-existing-data>
- </processing-directives>
- <schedule>
- <job>
- <name>TestJob</name>
- <group>Test</group>
- <description>TestJob测试</description>
- <job-type>QuartzDemo.TestJob, QuartzDemo</job-type>
- <durable>true</durable>
- <recover>false</recover>
- </job>
- <trigger>
- <cron>
- <name>TestJobTrigger</name>
- <group>Test</group>
- <job-name>TestJob</job-name>
- <job-group>Test</job-group>
- <start-time>2015-01-22T00:00:00+08:00</start-time>
- <cron-expression>0/3 * * * * ?</cron-expression>
- </cron>
- </trigger>
- </schedule>
- </job-scheduling-data>
3. 执行,在控制台和日志文件中每3秒钟显示一条测试信息:
注意,log4net.xml、quartz.config、quartz_jobs.xml,这几个文件要选择“复制”:
Quartz.NET管理周期性任务的更多相关文章
- (转)Quartz.NET管理类
最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下. public class QuartzManager<T> where T : class,IJob ...
- Quartz.NET管理类
最近做项目设计到Quartz.NET,写了一个Quartz.NET管理类,在此记录下. public class QuartzManager<T> where T : class,IJob ...
- Quartz JobStore管理Job
Quartz提供了RAMJobStore和JDBC JobStore两种方式用来Job,RAMJobStore将Job任务存入内存中,速度快:JobStore采用数据库的方式管理中,本文介绍JobSt ...
- 自开发实现Quartz Web管理
网上能找到的QuartzWeb管理的资料都是使用的一个国外人写的Quartz WebApp的东东.功能也非常全面. 可是作为自己的应用其有用不了那么多功能,一般我们仅仅要能够定义一个job,指定一个C ...
- quartz详解4:quartz线程管理
http://blog.itpub.NET/11627468/viewspace-1766967/ quartz启动后有多个线程同时在跑.启动时会启动主线程.集群线程.检漏线程.工作线程.主线程负责查 ...
- SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源码
页面展现 后台任务处理:恢复任务 15s执行一次后台打印消息 不BB了,直接上代码 import... /** * 调度工厂类 * Created by jinyu on 2018/4/14/014. ...
- .net core quartz job作业调度管理组件
定时作业对于多数系统来说,都会用到,定时作业的实现方式可以有多种方式,简单的方式用Timer就可以实现,但是达不到通用的效果,本文采用Quartz基础组件来搭建一套企业通用的作业调度管理服务,希望对于 ...
- Quartz与Spring整合进行热部署的实现(二)
Spring的org.springframework.scheduling.quartz.JobDetailBean提供Job可序列化的实现(具体实现可查看源码) 此时.我们原来的job就可以继承Qu ...
- (5)Quartz学习
原文:http://blog.csdn.net/zxl315/article/details/10879927 介绍Quartz Quartz是一个开源的任务调度系统,它能用来调度很多任务的执行. 运 ...
随机推荐
- w3school一个学习编程的好地方!
http://www.w3school.com.cn/index.html 每天过来学习几篇.
- 对比Linux系统和Windows系统哪个更好
最近半年来,我一直在读一本叫做<Linux就该这么学>的Linux教材,确实让我进步的很快,也慢慢的让Linux系统走入了我的知识认知中,那么学习前我们来对比下Windows和Linux的 ...
- NetworkReachable学习笔记
一.基本知识 在需要联网的iPhone程序中,我们首先需要检查网络的状态,如果不能连接网络则告诉用户程序不能使用的原因是没有网络连接.在iPhone的SystemConfiguration框架里有提供 ...
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
题意:给定一个环形字符串,让他把它分成k份,使得最大的字典序 最小. 思路:二分答案,首先很明显答案所有可能是 n*n种 排序可以先求出最长公共前缀,这样比较就只需要比较公共前缀的下一位就能比较出两 ...
- SparkSQL之旅
1.准备数据employee.txt ,Gong Shaocheng, ,Li Dachao, ,Qiu Xin, ,Cheng Jiangzhong, ,Wo Binggang, 将数据放入hdfs ...
- 当一个activity中按钮过多时怎么办?
这几天看极客学院的视频,跟视频中的老师学到的一些小技巧~~ .setOnClickListener(this) 通过重写this(我猜的是重写),下面有onClicked() package exam ...
- 2016年12-09php函数
php函数 函数名,参数列表,函数体 php时弱类型语言返回类型可以没有function 函数名(){} 1.简单函数四要素:返回类型,函数名,参数列表,函数体 function Show(){ ec ...
- thrift编译安装
关于thrift的介绍:http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/ Apache Thrift 是 Facebook 实现 ...
- fastqc, Per Base Sequence Content
Per Base Sequence Content对所有reads的每一个位置,统计ATCG四种碱基(正常情况)的分布: 横轴为位置,纵轴为百分比. 正常情况下四种碱基的出现频率应该是接近的,而且没有 ...
- 今天<人人都能弹吉他>免费版获得了苹果的新品推荐
今天改了一天程序, 来回测来回改, 准备提交一个新版本了. 傍晚跑步回来, 看了一下今天的下载量, 竟然比昨天多了. 然后就想, 难不成被苹果推荐了? 上线一看, 果然, 而且美国和中国两大市场都在新 ...