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

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

log4net配置文件(log4net.config)

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--日志路径-->
<param name= "File" value= "D:\QuartzLog\"/>
<!--是否是向文件中追加日志-->
<param name= "AppendToFile" value= "true"/>
<!--log保留天数-->
<param name= "MaxSizeRollBackups" value= ""/>
<!--日志文件名是否是固定不变的-->
<param name= "StaticLogFileName" value= "false"/>
<!--日志文件名格式为:--.log-->
<param name= "DatePattern" value= "yyyy-MM-dd&quot;.read.log&quot;"/>
<!--日志根据日期滚动-->
<param name= "RollingStyle" value= "Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
</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>
</configuration>

quartz配置文件(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 =
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 =
#quartz.scheduler.exporter.bindName = QuartzScheduler
#quartz.scheduler.exporter.channelType = tcp
#quartz.scheduler.exporter.channelName = httpQuartz

job配置信息(quartz_jobs.xml)

 <?xml version="1.0" encoding="UTF-8"?>

 <!-- This file contains job definitions in schema version 2.0 format -->

 <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> <!--TestJob测试 任务配置-->
<job>
<name>TestJob</name>
<group>Test</group>
<description>TestJob测试</description>
<job-type>ConsoleApplicationQuartz.TestJob,ConsoleApplicationQuartz</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>--22T00::+:</start-time>
<cron-expression>/ * * * * ?</cron-expression>
</cron>
</trigger> </schedule>
</job-scheduling-data>

一、控制台项目:

创建Job类实现IJob接口

 using log4net;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplicationQuartz
{
public sealed class TestJob : IJob
{
private readonly ILog _logger = LogManager.GetLogger(typeof(TestJob));
public void Execute(IJobExecutionContext context)
{
_logger.InfoFormat("TestJob测试");
}
}
}

Program主程序

 using log4net;
using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplicationQuartz
{
class Program
{
static void Main(string[] args)
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config")); ILog log = LogManager.GetLogger(typeof(Program)); StdSchedulerFactory factory = new StdSchedulerFactory();
IScheduler _scheduler = factory.GetScheduler();
_scheduler.Start();
Console.WriteLine("Start..."); Console.Read(); _scheduler.Shutdown();
Console.WriteLine("end...");
Console.Read(); }
}
}

运行效果:

ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [QuartzTest_Worker-] INFO ConsoleApplicationQuartz.TestJob - TestJob测试
ConsoleApplicationQuartz.TestJobname2016-- ::, [] INFO

二、Windows服务程序

创建IJob任务实现类

 using log4net;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace FD.ScheduleQuartz.WindowsServiceQuartz
{
public class TestJob : IJob
{
private static readonly ILog Logger = LogManager.GetLogger("TestJob");
public void Execute(IJobExecutionContext context)
{
string jobDes = context.JobDetail.Description;
Logger.Info(jobDes + "运行");
}
}
}

windows服务MainService主服务类

 using log4net;
using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks; namespace FD.ScheduleQuartz.WindowsServiceQuartz
{
public partial class MainService : ServiceBase
{
#region 字段
// 日志记录
private readonly ILog _logger;
// 调试器
private readonly IScheduler _scheduler;
#endregion public MainService()
{
InitializeComponent(); log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config")); _logger = LogManager.GetLogger(GetType());
StdSchedulerFactory factory = new StdSchedulerFactory();
_scheduler = factory.GetScheduler();
} protected override void OnStart(string[] args)
{
_scheduler.Start();
_logger.Info("服务启动");
} protected override void OnStop()
{
if (!_scheduler.IsShutdown)
_scheduler.Shutdown();
_logger.Info("服务停止");
} protected override void OnPause()
{
_scheduler.PauseAll();
base.OnPause();
} protected override void OnContinue()
{
_scheduler.ResumeAll();
base.OnContinue();
}
}
}

修改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-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [QuartzTest_Worker-] INFO TestJob - TestJob测试运行
TestJobname2016-- ::, [] INFO FD.ScheduleQuartz.WindowsServiceQuartz.MainService - 服务停止
FD.ScheduleQuartz.WindowsServiceQuartz.MainServicename

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

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

    一.什么是Quartz Quartz 是一个轻量级任务调度框架,只需要做些简单的配置就可以使用:它可以支持持久化的任务存储,即使是任务中断或服务重启后,仍可以继续运行.Quartz既可以做为独立的应用 ...

  2. Quartz定时任务简单实例

    文章纲要: 初步搭建一个由Quartz为引擎集群的定时任务模块,功能为每隔30秒打印一条信息(Hello World!!!) 一.环境 Spring MVC Mevan Quartz 2.2.1 二. ...

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

    作为一个优秀的开源调度框架,Quartz 具有以下特点: 强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求: 灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种 ...

  4. Quartz的简单使用

    一.Quartz 介绍 Quartz是Java领域最著名的.功能丰富的.开放源码的作业调度工具,几乎可以在所有的Java应用程序中集成--从小的单机应用到大的电子商务系统. Quartz可以用来执行成 ...

  5. Quartz SpringBoot 简单整合一下

    一次简单的代码整合记录. 数据库准备 如果是MySQL可能出现一些小问题.比如联合主键长度超限制,已经记录解决办法了. CREATE TABLE QRTZ_JOB_DETAILS ( SCHED_NA ...

  6. quartz 的简单使用

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

  7. 使用Quartz Job 简单的做一个定时服务

    第一步:创建一个windows服务 第二步:通过NuGet 安装Quartz (我搜索了Quartz 关键字 安装了 ) 第三步 代码部分 任务类 如 多个任务 就多几个类 public class ...

  8. Quartz简单案例

    需求需要开发一个每天定时推送消息给微信用户,第一次接触quartz,简单案例 1. 先编辑要执行的任务 测试类代码 package com.wqq.test.quartz; import org.sp ...

  9. Quartz和Spring Task定时任务的简单应用和比较

    看了两个项目,一个用的是Quartz写的定时器,一个是使用spring的task写的,网上看了2篇文章,写的比较清楚,这里做一下留存 链接一.菠萝大象:http://www.blogjava.net/ ...

随机推荐

  1. Spring--多人开发

    在spring中, 可以定义多个配置文件. 例子: ①首先定义一个班级类和一个学生类 1 package com.fuwh.spring;      }                    }    ...

  2. Angular datetime format

    <!DOCTYPE html> <html lang="en"> <head> <script type="text/javas ...

  3. FORM

    一 .新增的input输入属性 1.email类型 在表单提交E-mail地址时,无效的输入会生成很多无效数据,对后期的数据检索造成一定的影响.所以在表单提交之前,需要对输入的E-mail地址进行有效 ...

  4. C#:泛型(Generic)

    前言:  此系列都为个人对C#的回顾,属于个人理解,新司机可参考.求老司机指点.如果有什么问题或不同见解,欢迎大家与我沟通! 目录:  泛型是什么 泛型的好处及用途 如何声明使用泛型 泛型类 泛型方法 ...

  5. 忘记mysql root 密码修改小技巧

    首先我说一下我的情况,我并不是忘记了我的root密码,只不过是我在使用phpmyadmin的时候更改密码的时候选择了如图1 的这个方法将密码加密并更改了,然后就再次登录的时候登录不上,所以对于菜鸟级的 ...

  6. 国内github访问慢的解决方法

    本文是windows处理方法,macos方法也差不多. 一般Github的访问有两部分:主站的访问和二级域名的资源加载(比如样式文件等) 一般Github加载缓慢,主要是 assets-cdn.git ...

  7. ubuntu14.04环境下spyder的安装

    在ubuntu14.04系统中,默认在/usr/lib目录下安装了python2.7.6和python3.4.3,在该环境下安装spyder,然后使其链接到python3.4.3. 首先安装为pyth ...

  8. 创建dll教程

    先看我的总结: 总结: 1.头文件中如果想以C形式提供,要判断,如果定义了 _cplusplus, extern "c"{  这里写接口声明 } 2.接口声明中,要表明接口接入点的 ...

  9. py

    import httplib,urllib import re import random def Login(userid,password): params=urllib.urlencode({' ...

  10. svn 合并分支

    1.将某一主干/分支某一时段的改变,合并到工作空间副本 2.将某一主干/分支与其他主干/分支的改变,合并到工作空间副本