Quartz+TopShelf实现Windows服务作业调度
2016-04-29 00:29
459 查看
Quartz:首先我贴出来了两段代码(下方),可以看出,首先会根据配置文件(quartz.config),包装出一个Quartz.Core.QuartzScheduler
instance,这是一个调度器,调度各个任务项(Jobs)的执行。这个调度器可以被Start、被Shutdown、被PauseAll、被ResumeAll,这对应
了windows服务的开启、停止、暂停、恢复。当启动服务,我就调用调度器的Start(),停止服务我就调用调度器的Shutdown()方法。
那TopShelf又扮演了什么样的角色呢
这是一个宿主服务的框架。和ServiceBase、ServiceInstaller那一套的目的一样,都是用来创建Windows服务的。
2、从NuGet安装[b]‘Quartz’,‘Topshelf’,‘Topshelf.Log4Net’[/b]
3、定义一个Job(一个任务项),继承Quartz.IJob
4、配置(新建)quartz.config、quartz_jobs.xml
quartz.config可直接使用,不用修改
View Code
6、quartz.config、quartz_jobs.xml、log4net.config都设置成‘始终复制’
7、直接F5,调试,发现TestJob每5s执行一次
8、安装成Windows服务
用Release编一个版本
然后用命令行安装服务
服务面板里可以找到此服务
启动之,查看日志文件,服务运行正常
附:源码下载
instance,这是一个调度器,调度各个任务项(Jobs)的执行。这个调度器可以被Start、被Shutdown、被PauseAll、被ResumeAll,这对应
了windows服务的开启、停止、暂停、恢复。当启动服务,我就调用调度器的Start(),停止服务我就调用调度器的Shutdown()方法。
namespace QTDemo { public class ServiceRunner : ServiceControl, ServiceSuspend { private readonly IScheduler scheduler; public ServiceRunner() { scheduler = StdSchedulerFactory.GetDefaultScheduler(); } public bool Start(HostControl hostControl) { scheduler.Start(); return true; }
// 摘要: // An implementation of Quartz.ISchedulerFactory that does all of it's work // of creating a Quartz.Core.QuartzScheduler instance based on the contents // of a properties file. public class StdSchedulerFactory : ISchedulerFactory { public const string AutoGenerateInstanceId = "AUTO"; public const string ConfigurationSectionName = "quartz"; public const string DefaultInstanceId = "NON_CLUSTERED"; public const string PropertiesFile = "quartz.config";
那TopShelf又扮演了什么样的角色呢
这是一个宿主服务的框架。和ServiceBase、ServiceInstaller那一套的目的一样,都是用来创建Windows服务的。
项目示例
1、新建项目控制台应用程序‘QTDemo’2、从NuGet安装[b]‘Quartz’,‘Topshelf’,‘Topshelf.Log4Net’[/b]
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Common.Logging" version="3.3.1" targetFramework="net45" /> <package id="Common.Logging.Core" version="3.3.1" targetFramework="net45" /> <package id="log4net" version="2.0.5" targetFramework="net45" /> <package id="Quartz" version="2.3.3" targetFramework="net45" /> <package id="Topshelf" version="3.3.1" targetFramework="net45" /> <package id="Topshelf.Log4Net" version="3.3.1" targetFramework="net45" /> </packages>
3、定义一个Job(一个任务项),继承Quartz.IJob
using Quartz; namespace QTDemo.QuartzJobs { public sealed class TestJob : IJob { public void Execute(IJobExecutionContext context) { CommonHelper.AppLogger.InfoFormat("TestJob测试"); } } }
4、配置(新建)quartz.config、quartz_jobs.xml
quartz.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= "Log\"/> <!--是否是向文件中追加日志--> <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".read.log""/> <!--日志根据日期滚动--> <param name= "RollingStyle" value= "Date"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%date{HH:mm:ss,fff} %-5p-%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> </configuration>
View Code
6、quartz.config、quartz_jobs.xml、log4net.config都设置成‘始终复制’
7、直接F5,调试,发现TestJob每5s执行一次
8、安装成Windows服务
用Release编一个版本
然后用命令行安装服务
服务面板里可以找到此服务
启动之,查看日志文件,服务运行正常
23:23:52,171 INFO -Configuration Result: [Success] Name QuartzTopShelfDemoService [Success] DisplayName QuartzTopShelfDemo服务 [Success] Description Quartz+TopShelf实现Windows服务作业调度的一个示例Demo [Success] ServiceName QuartzTopShelfDemoService 23:23:52,185 INFO -Topshelf v3.3.154.0, .NET Framework v4.0.30319.34014 23:23:52,194 ERROR-The QuartzTopShelfDemoService service can only be installed as an administrator 23:25:54,758 INFO -Configuration Result: [Success] Name QuartzTopShelfDemoService [Success] DisplayName QuartzTopShelfDemo服务 [Success] Description Quartz+TopShelf实现Windows服务作业调度的一个示例Demo [Success] ServiceName QuartzTopShelfDemoService 23:25:54,772 INFO -Topshelf v3.3.154.0, .NET Framework v4.0.30319.34014 23:25:54,781 DEBUG-Attempting to install 'QuartzTopShelfDemoService' 23:25:54,901 INFO -Installing QuartzTopShelfDemo服务 service 23:25:55,123 DEBUG-Opening Registry 23:25:55,123 DEBUG-Service path: "E:\DotNetProject\Y2016\QTDemo\QTDemo\bin\Release\QTDemo.exe" 23:25:55,123 DEBUG-Image path: "E:\DotNetProject\Y2016\QTDemo\QTDemo\bin\Release\QTDemo.exe" -displayname "QuartzTopShelfDemo服务" -servicename "QuartzTopShelfDemoService" 23:25:58,357 DEBUG-Closing Registry 23:28:10,442 INFO -Configuration Result: [Success] Name QuartzTopShelfDemoService [Success] DisplayName QuartzTopShelfDemo服务 [Success] Description Quartz+TopShelf实现Windows服务作业调度的一个示例Demo [Success] ServiceName QuartzTopShelfDemoService 23:28:10,455 INFO -Topshelf v3.3.154.0, .NET Framework v4.0.30319.34014 23:28:10,649 DEBUG-Started by the Windows services process 23:28:10,649 DEBUG-Running as a service, creating service host. 23:28:10,651 INFO -Starting as a Windows service 23:28:10,654 DEBUG-[Topshelf] Starting up as a windows service application 23:28:10,657 INFO -[Topshelf] Starting 23:28:10,658 DEBUG-[Topshelf] Current Directory: E:\DotNetProject\Y2016\QTDemo\QTDemo\bin\Release 23:28:10,658 DEBUG-[Topshelf] Arguments: 23:28:10,940 INFO -[Topshelf] Started 23:28:10,988 INFO -TestJob测试 23:28:15,000 INFO -TestJob测试 23:28:20,000 INFO -TestJob测试
附:源码下载
相关文章推荐
- CentOS ping百度无法识别主机原因和解决办法
- 搜索服务solr 一二事(1) - solr-5.5 使用自带Jetty或者tomcat 搭建单机版搜索服务器
- Linux 配置启动模式-命令行界面
- windows下单机版伪分布式solrcloud搭建(solr-4.9.1+apache-tomcat-7.0.68+zookeeper-3.4.8)
- 详细分析SOA的十大设计原则
- Hadoop之——Could not resolve hostname XX错误解决办法
- Xshell配置ssh免密码登录-密钥公钥(Public key)与私钥(Private Key)登录【已成功实例】
- shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)
- Nginx教程(三) Nginx日志管理
- 第一个shell脚本
- linuxmint下nano编辑器使用教程
- 【CentOS7】修改主机名
- 【CentOS7】安装GlusterFS
- 【CentOS7】GlusterFS基本操作流程
- 【CentOS7】在Windows平台通过cifs挂载GlusterFS卷
- Linux mysqldump 数据库备份与还原
- Centos6.5 yum安装LAMP环境
- 使用rsync +cwrsync实现windows和linux的文件同步
- Linux学习笔记之论坛安装
- 网站集成QQ登录功能