windows 服务实现定时任务调度(Quartz.Net)

摘要:
首先来介绍一下Quartz.Net这个框架:简介:Quartz.Net是一个开源的任务调度框架,非常强大,能够通过简单的配置帮助我们定时具体的操作。目前最新版本是2.2,新的版本里面有些方法名发生了变化,从之前的版本用过来的人应该会有体会.这里我使用最常用,也是最稳定的方式--Windows服务里面使用Quartz.net,并且使用配置的方式来设置触发器。--这里是一个任务节点--˃1315˂!

我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动软件,或者每次都要手动的来启动软件,这时我们可可以考虑到windows服务了。

首先创建一个windows服务项目(详细信息请参阅:C#创建Windows Service(Windows 服务)基础教程

windows 服务实现定时任务调度(Quartz.Net)第1张

在创建好的项目中点击“单击此处切换到代码视图”切换到代码

我们主要关注一下两个方法:

• OnStart – 控制服务启动
• OnStop – 控制服务停止

例:

windows 服务实现定时任务调度(Quartz.Net)第2张windows 服务实现定时任务调度(Quartz.Net)第3张
1     public partial classService1 : ServiceBase
2 {
3         publicService1()
4 {
5 InitializeComponent();
6 }
7 
8         protected override void OnStart(string[] args)
9 {
10             //todo:这里是服务启动所执行的代码
11 }
12 
13         protected override voidOnStop()
14 {
15             //todo:这里是服务停止所执行的代码
16 }
17     }
View Code

下面我们可以写一个定时任务的功能了:

1      private voidStartDoSomething()
2 {
3             System.Timers.Timer timer = new System.Timers.Timer(10000); //间隔10秒
4             timer.AutoReset = true;
5             timer.Enabled = false;  //执行一次
6             timer.Elapsed += newElapsedEventHandler(ExecutionCode);
7 timer.Start();
8 }
9 
10         private void ExecutionCode(objectsource, System.Timers.ElapsedEventArgs e)
11 {
12             string dtNow = DateTime.Now.ToString("HH:mm");
13             if (dtNow == "12:00")
14 {
15                 File.WriteAllText("D:/ExecutionService.txt", "服务执行了一次任务", Encoding.UTF8);
16 }
17         }

然后在OnStart的方法中调用上面的StartDoSomething的方法

1         protected override void OnStart(string[] args)
2 {
3 StartDoSomething();
4         }    

以上就可以算是一个简单的定时执行任务的windows服务了,这里我们还可以使用Quartz.Net来实现更加强大的任务调度功能。

首先来介绍一下Quartz.Net这个框架:

简介:Quartz.Net是一个开源的任务调度框架,非常强大,能够通过简单的配置帮助我们定时具体的操作。相对于我们用的线程里面while(true)然后sleep来执行某个操作,应该算的上是高端,大气,上档次了。目前最新版本是2.2,新的版本里面有些方法名发生了变化,从之前的版本用过来的人应该会有体会.这里我使用最常用,也是最稳定的方式--Windows服务里面使用Quartz.net,并且使用配置的方式来设置触发器。(以上内容摘自网络)

简单的理解就是它能够帮我们定时的做事,相当于闹钟能够叫我们起床一样。

目前最新的版本是Quartz.NET 2.2.3大家可以在这里下载

现在我们需要在刚刚创建的服务项目中引用如下文件:

windows 服务实现定时任务调度(Quartz.Net)第4张

在配置文件中写好自己的配置(本例子演示定时访问指定网站)

windows 服务实现定时任务调度(Quartz.Net)第2张windows 服务实现定时任务调度(Quartz.Net)第6张
1 <?xml version="1.0"?>
2 <configuration>
3   <configSections>
4     <sectionGroup name="JobList">
5       <section name="Job"type="MyService1101.MyConfigHandler,MyService1101"/>
6     </sectionGroup>
7   </configSections>
8   <startup>
9     <supportedRuntime version="v4.0"sku=".NETFramework,Version=v4.5" />
10   </startup>
11   <JobList>
12     <Job>   <!--这里是一个任务节点-->
13       <add key="Url"value="http://www.baidu.com" />  <!--需要访问的Url-->
14       <add key="Hour"value="10" />   <!--开始时间小时,注意:这里的小时为0-23,如果是1点的话就是1,而不是01-->
15       <add key="Minute"value="30"/>    <!--开始时间分钟,注意:同上0-59-->
16     </Job>
17   </JobList>
18 </configuration>
View Code

新建一个MyConfigHandler.cs类来读取自定义配置节点

windows 服务实现定时任务调度(Quartz.Net)第2张windows 服务实现定时任务调度(Quartz.Net)第8张
1 public classMyConfigHandler : IConfigurationSectionHandler
2 {
3         publicMyConfigHandler()
4 {
5 }
6 
7         public object Create(object parent, objectconfigContext, System.Xml.XmlNode section)
8 {
9 NameValueCollection configs;
10             NameValueSectionHandler baseHandler = newNameValueSectionHandler();
11             configs =(NameValueCollection)baseHandler.Create(parent, configContext, section);
12             returnconfigs;
13 }
14     }
View Code

然后新建一个SystemScheduler类来创建调度程序

windows 服务实现定时任务调度(Quartz.Net)第2张windows 服务实现定时任务调度(Quartz.Net)第10张
1     public classSystemScheduler
2 {
3         privateSystemScheduler()
4 {
5 }
6 
7         public staticSystemScheduler CreateInstance()
8 {
9             return newSystemScheduler();
10 }
11 
12         privateIScheduler _scheduler;
13 
14         public voidStartScheduler()
15 {
16             //这里读取配置文件中的任务开始时间
17             int hour = int.Parse(((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Hour"]);
18             int minute = int.Parse(((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Minute"]);
19 
20             ISchedulerFactory schedulerFactory = new StdSchedulerFactory();//内存调度
21             _scheduler =schedulerFactory.GetScheduler();
22 
23             //创建一个Job来执行特定的任务
24             IJobDetail synchronousData = new JobDetailImpl("SynchronousData", typeof(SynchronousData));
25             //创建并定义触发器的规则(每天执行一次时间为:时:分)
26             ITrigger trigger =
27 TriggerBuilder.Create()
28 .WithDailyTimeIntervalSchedule(
29                         a => a.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(hour, minute))).Build();
30             //将创建好的任务和触发规则加入到Quartz中
31 _scheduler.ScheduleJob(synchronousData, trigger);
32             //开始
33 _scheduler.Start();
34 }
35 
36         public voidStopScheduler()
37 {
38 _scheduler.Shutdown();
39 }
40     }
View Code

新建一个SynchronousData类,让其实现IJob接口来实现SystemScheduler中自定义的任务

windows 服务实现定时任务调度(Quartz.Net)第2张windows 服务实现定时任务调度(Quartz.Net)第12张
1     public classSynchronousData : IJob
2 {
3         public voidExecute(IJobExecutionContext context)
4 {
5             string Url = ((NameValueCollection)ConfigurationSettings.GetConfig("JobList/Job"))["Url"];
6             WebClient wc = newWebClient();
7             WebRequest wr = WebRequest.Create(newUri(Url));
8             using (StreamWriter sw = File.AppendText(@"d:SchedulerService.txt"))
9 {
10                 sw.WriteLine("------------------" + "MyService服务在:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "执行了一次任务" + "------------------");
11 sw.Flush();
12 }
13 }
14     }
View Code

最后在OnStart中添加对这个调度程序的应用

1         protected override void OnStart(string[] args)
2 {
3             SystemScheduler _systemScheduler =SystemScheduler.CreateInstance();
4 _systemScheduler.StartScheduler();
5         }   

程序生成后我们可以通过指令安装它

windows 服务实现定时任务调度(Quartz.Net)第13张

安装完成后在服务中会有一个新的服务项

windows 服务实现定时任务调度(Quartz.Net)第14张

程序运行过后会在D:盘生成一个SchedulerService.txt文件

windows 服务实现定时任务调度(Quartz.Net)第15张

本程序源码:下载

2. Quartz 定时器时间设置

http://www.360doc.com/content/11/1017/10/1542811_156808468.shtml

windows 服务实现定时任务调度(Quartz.Net)第16张
windows 服务实现定时任务调度(Quartz.Net)第16张
Quartz
spring定时器的时间设置
时间的配置如下:<value>0 26 16 * * ?</value>
时间大小由小到大排列,从秒开始,顺序为 秒,分,时,天,月,年 *为任意 ?为无限制。 由此上面所配置的内容就是,在每天的16点26分启动buildSendHtml() 方法
具体时间设定可参考
"0/10 * * * * ?" 每10秒触发
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
0 0 06,18 * * ? 在每天上午6点和下午6点触发
0 30 5 * * ? * 在每天上午5:30触发
0 0/3 * * * ? 每3分钟触发

免责声明:文章转载自《windows 服务实现定时任务调度(Quartz.Net)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xml中设置button的背景颜色扩展 DataGridView 的功能(二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【quartz】 各数据库创建脚本

QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 QRTZ_FIRED_TRIGGERS 存储与已触发的 Trigger 相关的状态信息,以及相联 Job的执行信息 QRTZ_PAUSED_TRIGGER_GR...

基础概念总结(spring security、Quartz、JUnit测试)

1、Spring Security 的大体框架和原理 (1)在web.xml中配置过滤器,这样就可以控制这个项目的每个请求。 (2)在applicationContext.xml配置,其中http标签配置如何截用户请求,和配置用户认证(固定用户、使用数据库管理用户)。 (3)过滤器最上层为HttpSessionContextIntegrationFilt...

Quartz(GUI)图形界面程序----Quartz Web

下载、设置和运行Quartz(GUI)图形界面程序----Quartz Web 一、获取Quartz Web程序(Quartz GUI)。早期的 Quartz 框架开发者意识到一个 GUI 对于某类用户群体是必需的。几年前,一个 Web 应用被创立,它可用于管理 Quartz 框架。虽说是历经了几年有相当投入的开发,但不得不说的,总是时断时续的。近来出现有...

Quartz.Net系列(二):介绍、简单使用、对比Windows计划任务

1.介绍 Quartz是功能强大的开源作业调度库,几乎可以集成到任何Java应用程序中-从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数以万计,数以万计的工作。任务定义为标准Java组件的作业,它们实际上可以执行您可以对其执行的任何编程操作。Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群...

Quartz Scheduler(2.2.1)

SimpleTrigger should meet your scheduling needs if you need to have a job execute exactly once at a specific moment in time, or at a specific moment in time followed by repeats at...

springmvc+quartz 实现定时任务

springmvc+quartz实现定时任务; 1.pom.xml中添加依赖     1)springmvc依赖省略。。      2)quartz依赖     <dependency> <groupId>org.quartz-scheduler</groupId>...