任务调度框架-Quartz.Net

使用Quartz.Net依赖于以下3个组件:Common.Logging.dll、Common.Logging.Core.dll、Quartz.dll

简单封装

 1 using Quartz;
 2 using Quartz.Impl;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace Test
10 {
11     public class SchedulerHelper
12     {
13         /// <summary>
14         /// 任务调度器实例
15         /// </summary>
16         public static IScheduler scheduler { get; }
17         static SchedulerHelper()
18         {
19             //实例化任务调度器对象
20             scheduler = StdSchedulerFactory.GetDefaultScheduler();
21         }
22
23         /// <summary>
24         /// 添加任务
25         /// </summary>
26         /// <typeparam name="T">IJob类型</typeparam>
27         /// <param name="jobIdentity">job唯一标识</param>
28         /// <param name="triggerIdentity">trigger唯一标识</param>
29         /// <param name="cronExpression">cron表达式</param>
30         /// <param name="jobGroup">任务所属分组[可选]</param>
31         /// <param name="triggerGroup">触发器所属分组[可选]</param>
32         public static void AddScheduleJob<T>(string jobIdentity, string triggerIdentity, string cronExpression, string jobGroup = "", string triggerGroup = "")
33             where T : IJob
34         {
35             var jobBuilder = JobBuilder.Create<T>();
36             if (string.IsNullOrEmpty(jobGroup))
37                 jobBuilder.WithIdentity(jobIdentity);
38             else
39                 jobBuilder.WithIdentity(jobIdentity, jobGroup);
40
41             var currentJob = jobBuilder.Build();
42
43             var triggerBuilder = TriggerBuilder.Create();
44             if (string.IsNullOrEmpty(triggerGroup))
45                 triggerBuilder.WithIdentity(triggerIdentity);
46             else
47                 triggerBuilder.WithIdentity(triggerIdentity, triggerGroup);
48
49             var currentTrigger = triggerBuilder
50                                 .StartNow()
51                                 .WithCronSchedule(cronExpression)
52                                 .Build();
53
54             //把作业,触发器加入调度器。
55             scheduler.ScheduleJob(currentJob, currentTrigger);
56         }
57
58         public static void Start()
59         {
60             if (scheduler == null)
61                 throw new ArgumentNullException("scheduler", "任务调度器实例对象不能为null");
62             if (!scheduler.IsStarted)
63                 scheduler.Start();
64         }
65
66         public static void ShutDown()
67         {
68             if (scheduler == null)
69                 throw new ArgumentNullException("scheduler", "任务调度器实例对象不能为null");
70             if (!scheduler.IsShutdown)
71                 scheduler.Shutdown();
72         }
73     }
74 }

客户端

using NLog;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    public class WriteLogJob : IJob
    {
        ILogger log = LogManager.GetLogger("admin");
        public void Execute(IJobExecutionContext context)
        {
            try
            {
                log.Error(string.Format("当前时间为:{0}", DateTime.Now));
            }
            catch (Exception x) { }
        }
    }
}
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Configuration;
 4 using System.Linq;
 5 using System.Text;
 6
 7 namespace Test
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             SchedulerHelper.AddScheduleJob<WriteLogJob>("WriteLogJob", "WriteLogTrigger", "0/5 * * * * ?");
14
15             SchedulerHelper.Start();
16
17             Console.ReadLine();
18         }
19     }
20 }

Quartz的cron表达式

官文文档:cron表达式介绍

由7段构成:秒 分 时 日 月 星期 年(可选)
"-" :表示范围  MON-WED表示星期一到星期三
"," :表示列举 MON,WEB表示星期一和星期三
"*" :表是“每”,每月,每天,每周,每年等
"/" :表示增量:0/15(处于分钟段里面) 每15分钟,在0分以后开始,3/20 每20分钟,从3分钟以后开始
"?" :只能出现在日,星期段里面,表示不指定具体的值
"L" :只能出现在日,星期段里面,是Last的缩写,一个月的最后一天,一个星期的最后一天(星期六)
"W" :表示工作日,距离给定值最近的工作日
"#" :表示一个月的第几个星期几,例如:"6#3"表示每个月的第三个星期五(1=SUN...6=FRI,7=SAT)

常用cron表达式示例

// 0/5 * * * * ?            每5秒钟执行一次
// 0 0/5 * * * ?            每5分钟执行一次
// 10 0/5 * * * ?           每5分钟,在第10秒钟执行一次
// 0 30 10-13 ? * WED,FRI   每周的周三、周五,时针为10-13,分钟刻度为30的时候执行一次
// 0 0/30 8-9 5,20 * ?      每个月的第5、第20天,时针为8到9,分钟刻度为从0开始,每过30分钟执行一次

官方实例

Expression Meaning
0 0 12 * * ? Fire at 12pm (noon) every day
0 15 10 ? * * Fire at 10:15am every day
0 15 10 * * ? Fire at 10:15am every day
0 15 10 * * ? * Fire at 10:15am every day
0 15 10 * * ? 2005 Fire at 10:15am every day during the year 2005
0 * 14 * * ? Fire every minute starting at 2pm and ending at 2:59pm, every day
0 0/5 14 * * ? Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
0 0/5 14,18 * * ? Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
0 0-5 14 * * ? Fire every minute starting at 2pm and ending at 2:05pm, every day
0 10,44 14 ? 3 WED Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
0 15 10 ? * MON-FRI Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
0 15 10 15 * ? Fire at 10:15am on the 15th day of every month
0 15 10 L * ? Fire at 10:15am on the last day of every month
0 15 10 L-2 * ? Fire at 10:15am on the 2nd-to-last last day of every month
0 15 10 ? * 6L Fire at 10:15am on the last Friday of every month
0 15 10 ? * 6L Fire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-2005 Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
0 15 10 ? * 6#3 Fire at 10:15am on the third Friday of every month
0 0 12 1/5 * ? Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
0 11 11 11 11 ? Fire every November 11th at 11:11am.
时间: 2024-08-08 01:27:55

任务调度框架-Quartz.Net的相关文章

java计划任务调度框架quartz结合spring实现调度的配置实例代码分享

点击链接加入群[JavaEE(SSH+IntelliJIDE+Maven)]:http://jq.qq.com/?_wv=1027&k=L2rbHv 一:quartz简介 OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案. Quartz 是个开源的作业调度框架,定时调度器,为在 Java 应用程序中进行作业调度提供了简单却强大的机制. Quartz中有两个基本概念:作业和触发器.作业是能够调度的可执行任务,触发器提供了对作业的调度 二:quartz spring配置详

Java任务调度框架Quartz教程实例

介绍: Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序-从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. 核心概念 Quartz核心的概念:scheduler任务调度.Job任务.Trigger触发器.JobDetail任务细节 转自这篇文章对于Quartz定时器写的不错: http://blog.csdn.net/yuebinghaoyuan/article/details/9045471

Spring整合定时任务调度框架Quartz实战

定时的任务处理在程序开发中应用的相当普遍,之前一直使用JDK的Timer类库来做任务调度功能不是很方便,因为它不能像cron服务那样可以指定具体年.月.日.时和分的时间,我们只能将时间通过换算成微秒后传给它,而在quartz中我们只需要设置cronExpression就可以完成定时的周期性的方法调用.Quartz中最核心的是任务调度器Scheduler,它负责管理Job,Trigger和 Calendar,而每一个Job就是一个需要执行任务的java类,在Schelduler调度任务时 执行的就

一文揭秘定时任务调度框架quartz

之前写过quartz或者引用过quartz的一些文章,有很多人给我发消息问quartz的相关问题, quartz 报错:java.lang.classNotFoundException quartz源码分析之深刻理解job,sheduler,calendar,trigger及listener之间的关系 Quartz框架多个trigger任务执行出现漏执行的问题分析--转 quartz集群调度机制调研及源码分析---转载 分布式定时任务调度系统技术选型--转 趁着年底比较清闲,把quartz的问题

第五周作业 高端的定时任务调度框架Quartz

平时我们在使用的是jdk里面自带的Timer触发器,但是他有个很大的缺点,就是要设置执行频率,这对于处理大量请求的服务器来说是一件比较耗费资源的事情,因为我处理大量的请求已经是够忙的了,再来定时检查下任务效率就低了. Quartz有两大触发器,除了上面使用的SimpleTrigger外,就是CronTrigger.一个是简单触发器,一个是任务触发器,后者可以配置详细的任务执行时机,精确到某年,某月,某日,某时,某秒,在我们做项目的时候比较常用. Timer jdk里面的Timer比较简单,主要设

项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器,整合ehcache环境,只需要配置即可.     <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>

Quartz.Net任务调度框架

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

配置quartz任务调度框架

<properties> <quartz.version>2.2.2</quartz.version> </properties> <dependencyManagement> <dependencies> <!-- quartz任务调度框架 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId&g

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

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