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. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

  2. linux下epoll实现机制

    linux下epoll实现机制 原作者:陶辉 链接:http://blog.csdn.net/russell_tao/article/details/7160071 先简单回顾下如何使用C库封装的se ...

  3. SQL2008 无日志附加MDF文件

    SQL数据在附加的时候..有时会因为日志文件过大..或者一些其他问题造成附加失败.. 笔者遇到的问题是数据库主文件(*.mdf)超过25G..日志文件超过200G..附加的耗时简直日了狗了..最后超时 ...

  4. Spring学习记录1--@Transactional Propagation

    起因 学习Spring的时候就知道aop有一个应用是声明式注解..反正往Service上一丢@Transactional就完事了..不用自己去开启hibernate的session,很简单. 但是@T ...

  5. JSP多文件上传到服务器

    问题描述: 作为一个Java开发Web方向的程序员,很重要的一个功能,就是上传文件功能是一定要掌握的,今天整理了一下代码. 1.JSP显示界面代码和动态添加上传文件个数. <%@ page la ...

  6. Why did I have a recovery trip

    For more than a decade, I felt most at ease living out of a suitcase, never quite sure where I might ...

  7. 【UWP】通过特定URI打开Win10指定设置页面[转]

    系统设置其实也是一个Modern应用,它与ms-settings:协议进行了关联. 在设置应用中的每一个具体的设置页面都有一个URI(统一资源标识符)与之对应,通过这些URI就可以直达某个具体的设置页 ...

  8. REDHAT一总复习1 禁用颜色

    使用man page 研究如何在输出中禁用颜色.将ls命令的相关选项放到server上的文本文件 /home/student/lscolor.txt中. 1. 在ls(l) man page中查询相关 ...

  9. laravel5 安装笔记

    1.环境更新 apt-get update apt-get install php5-cli apt-get install curl 2. Composer安装 curl -sS https://g ...

  10. SQLServer日期函数用法

    --1.显示本月第一天 ,) ),)) --2.显示本月最后一天 ,),,))) ,,,)) --3.上个月的最后一天 ,,)) --4.本月的第一个星期一 , ) --5.本年的第一天 ,) --6 ...