C#-Windows服务+Quartz定时任务

Windows服务中,因为需要精确到特定时间执行,用Quartz代替定时器Timer。

顺便一提,Quartz如果在网页的项目中使用,Quartz会因为网页的关闭而停止,所以和Windows服务搭配较为理想。

1.新建服务

可以参考:https://www.cnblogs.com/ywkcode/p/11569593.html

2.Quartz使用

可以参考:https://www.cnblogs.com/ywkcode/p/11110126.html

代码如下:

(1)创建任务

新建“UpdateJob”类实现IJob接口

 1   public class UpdateJob : IJob
 2       {
 3
 4         public async Task Execute(IJobExecutionContext context)
 5         {
 6             try
 7             {
 8                 await Task.Run(() => UpdateJobFun());
 9             }
10             catch (Exception ex)
11             {
12                 await Task.Run(() => LogHelper.WriteLogs(""));
13                 throw ex;
14             }
15         }
16         public void UpdateJobFun()
17         {
18                       //日志记录
19             LogHelper.WriteLogs("当前时间为:"+DateTime.Now.ToString("yyyy-MM-dd  HH:mm:ss"));
20         }
21     }

(2)创建任务调度器->创建触发器->将任务和触发器添加到调度器中

创建类“JobScheduler”

 1 public class JobScheduler
 2     {
 3         //调度器工厂
 4         private static readonly ISchedulerFactory factory = null;
 5         //调度器
 6         private static readonly IScheduler scheduler = null;
 7         //定时规则
 8         public static string QuartzCron =
 9             ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings.Settings["QuartzCron"].Value; //
10         static JobScheduler()
11         {
12             //创建一个工厂
13             factory = new StdSchedulerFactory();
14             scheduler = factory.GetScheduler().Result;
15             scheduler.Start();
16         }
17         public static void Start()
18         {
19
20                 scheduler.GetJobGroupNames();
21                 IJobDetail job;
22                 ITrigger trigger;
23                 //创建任务
24                 //Quartz.JobBuilder.Create<UpdateJob>().Build();
25                 job = JobBuilder.Create<UpdateJob>().Build();
26                 //创建触发器
27                 trigger = TriggerBuilder.Create()
28                     .WithIdentity("TimeTrigger", "TimeGroup")
29                     //.WithSimpleSchedule(t => t.WithIntervalInMinutes(1).RepeatForever())
30                     .WithCronSchedule(QuartzCron)
31                     .Build();
32                 //添加任务及触发器至调度器中
33                 scheduler.ScheduleJob(job, trigger);
34                 //启动
35                 scheduler.Start();
36
37         }
38         public static void OnStop()
39         {
40             if (!scheduler.IsShutdown)
41             {
42                 scheduler.Shutdown();
43             }
44         }
45     }

其中触发器的规则除了常用的时分秒间隔外,还能够通过Corn表达式自定义,参考规则 http://cron.qqe2.com/,本文是以每天的9点到晚上22点,整点定时执行("0 0 9,10,11,12,13,14,15,16,17,18,19,20,21,22 * * ? *")

(3)开启或结束任务

 1   public partial class QuartzService : ServiceBase
 2     {
 3
 4         private IScheduler scheduler;
 5         public QuartzService()
 6         {
 7             InitializeComponent();
 8
 9         }
10         protected override void OnStart(string[] args)
11         {
12             JobScheduler.Start();
13         }
14         protected override void OnStop()
15         {
16             JobScheduler.OnStop();
17         }
18     }

原文地址:https://www.cnblogs.com/ywkcode/p/12129084.html

时间: 2024-09-29 08:49:34

C#-Windows服务+Quartz定时任务的相关文章

C# 添加Windows服务,定时任务。

源码下载地址:http://files.cnblogs.com/files/lanyubaicl/20160830Windows%E6%9C%8D%E5%8A%A1.zip 步骤 一 . 创建服务项目. 步骤二 .添加安装程序.  步骤三 .服务属性设置 [serviceInstaller1]. 4.1 添加定时任务 public partial class SapSyn : ServiceBase { System.Timers.Timer timer1; //计时器 System.Timer

Windows服务的安装及配合定时器编写简单的程序

最近要实时统计一些数据,所以就用到了Windows服务及定时任务,在这里记录下. Windows Service简介: 一个Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序.Windows服务程序虽然是可执行的,但是它不像一般的可执行文件通过双击就能开始运行了,它必须有特定的启动方式.这些启动方式包括了自动启动和手动启动两种.对于自动启动的Windows服务程序,它们在Windows启动或是重启之后用户登录之前就开始执行了.只要你将相应的Windows服务程序注

windows服务+定时任务(quartz.net)+nancy

需求一:软件要能在操作系统启动后,自动运行因为操作系统是windows 10,所以最先想到的是windows服务,因为windows服务有个自动启动选项,设为true就行了..net做这个最合适了,可以建windows服务项目. 需求二:包含N个任务,要求每天.每周.每月都可以执行,时间可自己设置面对这个需求,很明显Timer不适合了,最先想到的便是Quartz.net,因为这个东西之前也用过,所以就用它了.满足需求绰绰有余.有一点需要说明的是,具体时间是保存在数据库里面的,服务在从数据库读取到

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

我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动软件,或者每次都要手动的来启动软件,这时我们可可以考虑到windows服务了. 首先创建一个windows服务项目(详细信息请参阅:C#创建Windows Service(Windows 服务)基础教程) 在创建好的项目中点击“单击此处切换到代码视图”切换到代码 我们主要关注一下两个方法: • OnStart – 控制服务启动 • OnStop – 控制服务停止 例: 1 public partial class S

Quartz.Net在windows服务中的使用

写在前面 这几天在弄一个项目,需要定时抓取一些数据,当时也想直接用timer算了.因为之前也弄过这样的项目,但是一想,已经用过了,再去使用同一种思路,未免太乏味了.就换了一种新玩法.这里将之前看到的一篇文章中提出的一个思路,在这个项目中实践了一下,发现乐在其中. Quarzt.net [转]C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe 这篇文章,给了一种好玩的方式,并且自己也实践了一下,而且也确确实实在项目中用到了. 简单一个demo,先熟悉如

采用Windows服务任务调度Quartz.NET

Windows服务使用标准的Csharp编写,任务调度框架采用开源的Quartz.NET.    首先创建Windows服务-JobService     其次创建类库项目-JobLibrary    整体解决方案架构图如下:     在JobLibary中添加Quartz.NET的Nuget包引用,添加之后,vs会自动添加一系列的依赖项,这些依赖项是必须的,别手抖删掉了.            其次再添加Common.Logging.Log4Net1211的Nuget包,他是Log4net的另

Quartz+TopShelf实现Windows服务作业调度

Quartz:首先我贴出来了两段代码(下方),可以看出,首先根据配置文件(quartz.config),包装出一个Quartz.Core.QuartzScheduler instance,这是一个调度器,调度各个任务项(Jobs)的执行.这个调度器可以被Start.被Shutdown.被PauseAll.被ResumeAll,这对应 了windows服务的开启.停止.暂停.恢复.当启动服务,我就调用调度器的Start(),停止服务我就调用调度器的Shutdown()方法. namespace Q

Quartz.NET Windows 服务示例

想必大家在项目中处理简单的后台持续任务或者定时触发任务的时候均使用 Thread 或者 Task 来完成,但是项目中的这种需求一旦多了的话就得将任务调度引入进来了,那今天就简单的介绍一下 Quartz.NET 基于 Windows 服务宿主是怎样配置使用的. Quartz.NET 是一个优秀的任务调度框架,移植于 Java 版的 Quartz . 官网:http://www.quartz-scheduler.net Github:https://github.com/quartznet/quar

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

使用普通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.