您的位置:首页 > 其它

使用普通Windows服务创建Quartz.Net服务项目

2014-07-14 12:08 399 查看
使用普通Windows服务创建Quartz.Net服务项目

首先创建Quartz.Net.2.0解决方案,添加 Windows服务 项目,添加安装程序,修改服务运行账户类型为LocalSystem(默认为User)

添加C5.dll、Common.Logging.dll、Common.Logging.Log4Net.dll、log4net.dll、Quartz.dll引用
C5.dll 一个C#和其他CLI语言的泛型集合类。.Net2.0及以上才可以使用。简介地址:http://www.itu.dk/research/c5/ Common.Logging.dll 通用日志接口 Common.Logging.Log4Net.dll 提供log4net对通用日志接口(Common.Logging)的实现 log4net.dll 小白都知道不解释

添加quartz.config文件 Quartz.Net的配置文件,并设置编译时生成到输出目录为始终复制

Windows服务文件上右键查看代码,编写Quartz服务启动代码,重写OnStart、OnStop、OnPause、OnContinue方法,分别对应IScheduler的Start、Shutdown、PauseAll、ResumeAll方法,详见代码
View Code

2012-04-15 08:10:28,391 INFO  Quartz.Impl.StdSchedulerFactory  - Quartz.NET properties loaded from configuration file 'D:\QuartzService\quartz.config'
2012-04-15 08:10:28,438 INFO  Quartz.Impl.StdSchedulerFactory  - Using default implementation for object serializer
2012-04-15 08:10:28,478 INFO  Quartz.Impl.StdSchedulerFactory  - Using default implementation for ThreadExecutor
2012-04-15 08:10:28,498 INFO  Quartz.Core.SchedulerSignalerImpl  - Initialized Scheduler Signaller of type: Quartz.Core.SchedulerSignalerImpl
2012-04-15 08:10:28,498 INFO  Quartz.Core.QuartzScheduler  - Quartz Scheduler v.2.0.0.400 created.
2012-04-15 08:10:28,502 INFO  Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin  - Registering Quartz Job Initialization Plug-in.
2012-04-15 08:10:28,517 INFO  Quartz.Simpl.RAMJobStore  - RAMJobStore initialized.
2012-04-15 08:10:28,540 INFO  Quartz.Simpl.RemotingSchedulerExporter  - Registering remoting channel of type 'System.Runtime.Remoting.Channels.Tcp.TcpChannel' to port (555) with name (httpQuartz)
2012-04-15 08:10:28,540 INFO  Quartz.Simpl.RemotingSchedulerExporter  - Remoting channel registered successfully
2012-04-15 08:10:28,541 INFO  Quartz.Simpl.RemotingSchedulerExporter  - Successfully marhalled remotable scheduler under name 'QuartzScheduler'
2012-04-15 08:10:28,543 INFO  Quartz.Core.QuartzScheduler  - Scheduler meta-data: Quartz Scheduler (v2.0.0.400) 'ServerScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'Quartz.Core.QuartzScheduler' - access via remote incovation.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'Quartz.Simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'Quartz.Simpl.RAMJobStore' - which does not support persistence. and is not clustered.

2012-04-15 08:10:28,543 INFO  Quartz.Impl.StdSchedulerFactory  - Quartz scheduler 'ServerScheduler' initialized
2012-04-15 08:10:28,543 INFO  Quartz.Impl.StdSchedulerFactory  - Quartz scheduler version: 2.0.0.400
2012-04-15 08:10:28,554 INFO  Quartz.Xml.XMLSchedulingDataProcessor  - Parsing XML file: D:\QuartzService\quartz_jobs.xml with systemId: ~/quartz_jobs.xml
2012-04-15 08:10:28,930 INFO  Quartz.Xml.XMLSchedulingDataProcessor  - Adding 2 jobs, 3 triggers.
2012-04-15 08:10:28,933 INFO  Quartz.Xml.XMLSchedulingDataProcessor  - Adding job: DeomJobGroup.DemoJob1
2012-04-15 08:10:28,937 INFO  Quartz.Xml.XMLSchedulingDataProcessor  - Adding job: DeomJobGroup.DemoJob2
2012-04-15 08:10:28,997 INFO  Quartz.Core.QuartzScheduler  - Scheduler ServerScheduler_$_NON_CLUSTERED started.
2012-04-15 08:10:28,997 INFO  Quartz.Net.Service.QuartzService  - Quartz服务成功启动
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 任务开始运行
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行0
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行1
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行2
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行3
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行4
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行5
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行6
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行7
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行8
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行9
2012-04-15 08:10:30,041 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1任务运行结束
2012-04-15 08:11:00,002 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 任务开始运行
2012-04-15 08:11:00,002 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行0
2012-04-15 08:11:00,002 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行1
2012-04-15 08:11:00,002 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行2
2012-04-15 08:11:00,002 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行3
2012-04-15 08:11:00,002 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行4
2012-04-15 08:11:00,003 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行5
2012-04-15 08:11:00,003 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行6
2012-04-15 08:11:00,003 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行7
2012-04-15 08:11:00,003 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行8
2012-04-15 08:11:00,003 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行9
2012-04-15 08:11:00,003 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1任务运行结束
2012-04-15 08:11:00,003 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 任务开始运行
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行0
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行1
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行2
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行3
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行4
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行5
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行6
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行7
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行8
2012-04-15 08:11:00,004 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2 正在运行9
2012-04-15 08:11:00,005 INFO  Quartz.Net.Demo.DemoJob2  - DemoJob2任务运行结束
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 任务开始运行
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行0
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行1
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行2
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行3
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行4
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行5
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行6
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行7
2012-04-15 08:11:29,999 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行8
2012-04-15 08:11:30,000 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1 正在运行9
2012-04-15 08:11:30,000 INFO  Quartz.Net.Demo.DemoJob1  - DemoJob1任务运行结束
2012-04-15 08:11:32,607 INFO  Quartz.Core.QuartzScheduler  - Scheduler ServerScheduler_$_NON_CLUSTERED shutting down.
2012-04-15 08:11:32,608 INFO  Quartz.Core.QuartzScheduler  - Scheduler ServerScheduler_$_NON_CLUSTERED paused.
2012-04-15 08:11:32,611 INFO  Quartz.Simpl.RemotingSchedulerExporter  - Successfully disconnected remotable scheduler
2012-04-15 08:11:32,612 INFO  Quartz.Core.QuartzScheduler  - Scheduler ServerScheduler_$_NON_CLUSTERED Shutdown complete.
2012-04-15 08:11:32,612 INFO  Quartz.Net.Service.QuartzService  - Quartz服务成功终止


日志记录时可以根据需要使用Common.logging或者log4net,因为Quartz.Net使用的Common.logging的log4net实现,所以必须同时引用这两个dll,具体项目中引用这两个任意一个效果都是一样的(在使用log4net的前提下)

源文件下载:Quartz-2.0Demo.rar

PS:

有很多人问Quartz启动后,关闭服务时无法及时关闭,必须杀进程才可以,解决方法时在调用Shutdown方法时传入参数false,即不等待任务运行结束立即关闭

scheduler.Shutdown(false);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: