Quartz.Net简单使用

Quartz.Net为开源的作业调度框架,使用方便,实现IJob接口,及相关配置,即可实现调度。

项目包安装:

install-package Quartz

install-package log4net

install-package Common.Logging.Log4Net1211(最新版为Common.Logging.Log4Net1213,但会出现“Unable to create instance of type Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter.”异常)

配置文件:

App.config

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3     <startup>
 4         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
 5     </startup>
 6   <runtime>
 7     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 8       <dependentAssembly>
 9         <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
10         <bindingRedirect oldVersion="0.0.0.0-1.2.15.0" newVersion="1.2.15.0" />
11       </dependentAssembly>
12     </assemblyBinding>
13   </runtime>
14 </configuration>

log4net.config

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

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 <!-- This file contains job definitions in schema version 2.0 format -->
 4
 5 <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
 6
 7   <processing-directives>
 8     <overwrite-existing-data>true</overwrite-existing-data>
 9   </processing-directives>
10
11   <schedule>
12
13     <!--TestJob测试 任务配置-->
14     <job>
15       <name>TestJob</name>
16       <group>Test</group>
17       <description>TestJob测试</description>
18       <job-type>ConsoleApplicationQuartz.TestJob,ConsoleApplicationQuartz</job-type>
19       <durable>true</durable>
20       <recover>false</recover>
21     </job>
22     <trigger>
23       <cron>
24         <name>TestJobTrigger</name>
25         <group>Test</group>
26         <job-name>TestJob</job-name>
27         <job-group>Test</job-group>
28         <start-time>2015-01-22T00:00:00+08:00</start-time>
29         <cron-expression>0/3 * * * * ?</cron-expression>
30       </cron>
31     </trigger>
32
33   </schedule>
34 </job-scheduling-data>

一、控制台项目:

创建Job类实现IJob接口

 1 using log4net;
 2 using Quartz;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace ConsoleApplicationQuartz
10 {
11     public sealed class TestJob : IJob
12     {
13         private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob));
14         public void Execute(IJobExecutionContext context)
15         {
16             _logger.InfoFormat("TestJob测试");
17         }
18     }
19 }

Program主程序

 1 using log4net;
 2 using Quartz;
 3 using Quartz.Impl;
 4 using System;
 5 using System.Collections.Generic;
 6 using System.IO;
 7 using System.Linq;
 8 using System.Text;
 9 using System.Threading.Tasks;
10
11 namespace ConsoleApplicationQuartz
12 {
13     class Program
14     {
15         static void Main(string[] args)
16         {
17             log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
18
19             ILog log = LogManager.GetLogger(typeof(Program));
20
21             StdSchedulerFactory factory = new StdSchedulerFactory();
22             IScheduler _scheduler = factory.GetScheduler();
23             _scheduler.Start();
24             Console.WriteLine("Start...");
25
26             Console.Read();
27
28             _scheduler.Shutdown();
29             Console.WriteLine("end...");
30             Console.Read();
31
32         }
33     }
34 }

运行效果:

ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:30,012 [QuartzTest_Worker-2] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:33,007 [QuartzTest_Worker-3] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:36,005 [QuartzTest_Worker-4] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:39,012 [QuartzTest_Worker-5] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:42,007 [QuartzTest_Worker-6] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:45,002 [QuartzTest_Worker-7] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:48,012 [QuartzTest_Worker-8] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:51,002 [QuartzTest_Worker-9] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:29:54,002 [QuartzTest_Worker-10] INFO  ConsoleApplicationQuartz.TestJob - TestJob测试
 ConsoleApplicationQuartz.TestJobname2016-11-23 15:32:25,981 [16] INFO  

二、Windows服务程序

创建IJob任务实现类

 1 using log4net;
 2 using Quartz;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace FD.ScheduleQuartz.WindowsServiceQuartz
10 {
11     public class TestJob : IJob
12     {
13         private static readonly ILog Logger = LogManager.GetLogger("TestJob");
14         public void Execute(IJobExecutionContext context)
15         {
16             string jobDes = context.JobDetail.Description;
17             Logger.Info(jobDes + "运行");
18         }
19     }
20 }

MainService主服务类

 1 using log4net;
 2 using Quartz;
 3 using Quartz.Impl;
 4 using System;
 5 using System.Collections.Generic;
 6 using System.ComponentModel;
 7 using System.Data;
 8 using System.Diagnostics;
 9 using System.IO;
10 using System.Linq;
11 using System.ServiceProcess;
12 using System.Text;
13 using System.Threading.Tasks;
14
15 namespace FD.ScheduleQuartz.WindowsServiceQuartz
16 {
17     public partial class MainService : ServiceBase
18     {
19         #region 字段
20         // 日志记录
21         private readonly ILog _logger;
22         // 调试器
23         private readonly IScheduler _scheduler;
24         #endregion
25
26         public MainService()
27         {
28             InitializeComponent();
29
30             log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
31
32             _logger = LogManager.GetLogger(GetType());
33             StdSchedulerFactory factory = new StdSchedulerFactory();
34             _scheduler = factory.GetScheduler();
35         }
36
37         protected override void OnStart(string[] args)
38         {
39             _scheduler.Start();
40             _logger.Info("服务启动");
41         }
42
43         protected override void OnStop()
44         {
45             if (!_scheduler.IsShutdown)
46                 _scheduler.Shutdown();
47             _logger.Info("服务停止");
48         }
49
50         protected override void OnPause()
51         {
52             _scheduler.PauseAll();
53             base.OnPause();
54         }
55
56         protected override void OnContinue()
57         {
58             _scheduler.ResumeAll();
59             base.OnContinue();
60         }
61     }
62 }

修改quartz_jobs.xml中配置

将job-type修改为windows服务项目中类型

<job-type>FD.ScheduleQuartz.WindowsServiceQuartz.TestJob,WindowsServiceQuartz</job-type>

创建Windows服务的ProjectInstaller,并设置相应的服务名称及显示名称,运行此服务账号类型(LocalSystem),启动此服务方式和时间设置为Manual

编码后:通过:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\下的installUtil.exe安装Windows服务

如图:

启动,及停止服务后,得到log内容:

FD.ScheduleQuartz.WindowsServiceQuartz.MainService - 服务启动
 FD.ScheduleQuartz.WindowsServiceQuartz.MainServicename2016-11-23 16:03:53,206 [QuartzTest_Worker-1] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:03:54,002 [QuartzTest_Worker-2] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:03:57,012 [QuartzTest_Worker-3] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:00,015 [QuartzTest_Worker-4] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:03,000 [QuartzTest_Worker-5] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:06,010 [QuartzTest_Worker-6] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:09,006 [QuartzTest_Worker-7] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:12,011 [QuartzTest_Worker-8] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:15,011 [QuartzTest_Worker-9] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:18,011 [QuartzTest_Worker-10] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:21,006 [QuartzTest_Worker-1] INFO  TestJob - TestJob测试运行
 TestJobname2016-11-23 16:04:21,404 [17] INFO  FD.ScheduleQuartz.WindowsServiceQuartz.MainService - 服务停止
 FD.ScheduleQuartz.WindowsServiceQuartz.MainServicename
时间: 2024-07-31 13:17:21

Quartz.Net简单使用的相关文章

【Quartz】Quartz的简单搭建

Quartz在Java构建的系统中,是十分常用的定时任务框架. 本文,记录.介绍Quartz的简单入门的单独搭建(此文入门学习Quartz为主,并非基于Spring托管形式). > 参考的优秀资料 Quartz Quick Start Guide Chapter 3: Logback configuration > 版本说明 除了Quartz,还引入logback(为了看详细的日志嘛!) <dependencies> <dependency> <groupId&g

基于Quartz实现简单的定时发送邮件

一.什么是Quartz Quartz 是一个轻量级任务调度框架,只需要做些简单的配置就可以使用:它可以支持持久化的任务存储,即使是任务中断或服务重启后,仍可以继续运行.Quartz既可以做为独立的应用提供服务,也可以和其他应用集成一起使用. 核心概念: 1.Job 表示一个工作,要执行的具体内容.此接口中只有一个方法 void execute(JobExecutionContext context) 2.JobDetail JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调

Quartz的简单使用,基于1.X(一)【入门及CronTrigger】

 什么是Quartz Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz允许开发人员根据时间间隔来调度作业.它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联.简单地创建一个org.quarz.Job接口的Java类,Job接口包含唯一的方法:     public void execute(JobExecutionContext context) throws JobExecutionExceptio

C#中Quartz的简单易懂定时任务实现

作为一个优秀的开源调度框架,Quartz 具有以下特点: 强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求: 灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式: 分布式和集群能力,Terracotta 收购后在原来功能基础上作了进一步提升. 另外,作为 Spring 默认的调度框架,Quartz 很容易与 Spring 集成实现灵活可配置的调度功能. quartz调度核心元素: Scheduler:任务调度器,是实际执行任务调度的控制器.在spr

iOS开发——图形编程OC篇&amp;(四)Quartz 2D简单使用

Quartz2D简单使用 一.画直线 代码: 1 // 2 // YYlineview.m 3 // 03-画直线 4 // 5 // Created by apple on 14-6-9. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYlineview.h" 10 11 @implementation YYlineview 12 13 14 // 当自定义view第一次显示出来的时候

Quartz(1)--简单示例

Quartz 是一个企业级调度工作的框架,帮助Java应用程序到调度工作/任务在指定的日期和时间运行,本文的Quartz版本为2.2.1. 1. Quartz 作业 job Quartz作业定义要运行什么,实现Job接口中的execute方法 package com.quartz; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; publi

Quartz 2D简单的绘图

利用CG框架绘图的步骤: 1.子类化UIView 2.在GraphicView中复写drawRect方法 3.获取图形上下文对象 4.绘制线条 (1)先创建一个路径,把线条定义在这个路径上,再把路径交给context去显示. (2)直接把线条绘制到context上去. 5.绘制简单图形 6.绘制文本 10. 7.绘制图像 12.- (void)drawRect:(CGRect)rect { 13. //1.获取图形上下文 CGContextRef context = UIGraphicsGetC

quartz 的简单使用

0.依赖: <!-- 引入quartz对应的依赖 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency> <dependency> <groupId>org.quartz-sch

任务调度框架-Quartz.Net

使用Quartz.Net依赖于以下3个组件:Common.Logging.dll.Common.Logging.Core.dll.Quartz.dll 简单封装 1 using Quartz; 2 using Quartz.Impl; 3 using System; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 na