最近做了一个定时执行任务的软件。

执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象。

我做的是每天的9点和16点执行一次任务,以此记录:

首先,获得Quartz.Net,

其实可以使用vs2015的Nuget管理器,下载。

我做了一个QuartzHelper,但是在主程序中,还是需要其他代码的。

这是QuartzHelper的代码:

 using Quartz;
using Quartz.Impl; namespace Cong.Utility
{
public class QuartzHelper
{
/// <summary>
/// 时间间隔执行任务
/// </summary>
/// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
/// <param name="seconds">时间间隔(单位:毫秒)</param>
public static void ExecuteInterval<T>(int seconds) where T : IJob
{
ISchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = factory.GetScheduler(); //IJobDetail job = JobBuilder.Create<T>().WithIdentity("job1", "group1").Build();
IJobDetail job = JobBuilder.Create<T>().Build(); ITrigger trigger = TriggerBuilder.Create()
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds).RepeatForever())
.Build(); scheduler.ScheduleJob(job, trigger); scheduler.Start();
} /// <summary>
/// 指定时间执行任务
/// </summary>
/// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
/// <param name="cronExpression">cron表达式,即指定时间点的表达式</param>
public static void ExecuteByCron<T>(string cronExpression) where T : IJob
{
ISchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = factory.GetScheduler(); IJobDetail job = JobBuilder.Create<T>().Build(); //DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
//DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3); ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
//.StartAt(startTime).EndAt(endTime)
.WithCronSchedule(cronExpression)
.Build(); scheduler.ScheduleJob(job, trigger); scheduler.Start(); //Thread.Sleep(TimeSpan.FromDays(2));
//scheduler.Shutdown();
}
} #region 任务执行例
//public class MyJob : IJob
//{
// public void Execute(IJobExecutionContext context)
// {
// Console.WriteLine("executed..." + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
// }
//}
#endregion
}

大概的过程是这样的:
通过ISchedulerFactory实例化一个计划工厂对象,并使用工厂实例化一个scheduler计划对象,

然后实例化一个任务对象job,也就是定义任务内容的对象,需要传入一个实现IJob接口的类,这里我使用了泛型,

接着,需要一个能触发任务的对象,这里有两种,

一种是ITrigger,这是用于规格时间间隔,计划开始后,会根据间隔的时间值,触发执行任务;

另一种是ICronTrigger,这是通过Cron表达式规格执行的时间,计划开始后,如果时间符合规定时间,就触发执行任务。

最后,把job和trigger都传入计划scheduler,计划开始。

最下方的任务执行例是一个例子,

必须实现IJob接口和Execute方法。

如果需要在Execute方法内,调用类外部的数据,我是通过在项目中定义静态类的方法,供MyJob调用的。

程序开始计划的代码:

string cronExpression = "0 0 9,16 * * ? ";  =>这是指每天的9点和16点执行任务
QuartzHelper.ExecuteByCron<MyJob>(cronExpression);  =>这是调用Cron计划方法

简单说一下Cron表达式吧,

"0 0 9,16 * * ? ",

顺序从左到右

:秒

:分

9,16:小时,逗号分隔

如果需要更详细的说明,可以百度。

C# Quartz.Net 定时任务的简单使用的更多相关文章

  1. Quartz.net 定时任务之简单任务

    一.概述 1.quartz.net 是一款从java quartz 上延伸出来的定时任务框架. 2.我在网上看到很多大神写过关于quartz.net 的博客.文章等,在这些博客文章里也学会了很多关于q ...

  2. Quartz.net 定时任务之Cron表达式

    一.cron表达式简单介绍和下载 1.在上一篇博客"Quartz.net 定时任务之简单任务"中,我简单介绍了quartz的使用,而这篇博客我将介绍cron的具体使用(不足之处望大 ...

  3. 使用Quartz创建定时任务

    项目开发中经常需要定时循环执行某些任务 比如定时发送报表,定时发送邮件,亦或者定时清理缓存,定时更新数据等等 有些时候可以简单地利用Windows Server的计划任务执行程序 Linux也有相应的 ...

  4. Spring+Quartz 实现定时任务的配置方法

    Spring+Quartz 实现定时任务的配置方法 整体介绍 一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是 ...

  5. Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置 >>>>>>>>>>>>&g ...

  6. 【spring-boot】 springboot整合quartz实现定时任务

    在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的. spring支持多种定时任务的实现.我们来介绍下使用spring的定时器和使用quartz定时器 1.我们使用s ...

  7. SpringBoot集成Quartz实现定时任务

    1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...

  8. springboot整合Quartz实现定时任务

    1.maven依赖: <!--quartz--> <dependency> <groupId>org.quartz-scheduler</groupId> ...

  9. Spring Boot集成quartz实现定时任务并支持切换任务数据源

    org.quartz实现定时任务并自定义切换任务数据源 在工作中经常会需要使用到定时任务处理各种周期性的任务,org.quartz是处理此类定时任务的一个优秀框架.随着项目一点点推进,此时我们并不满足 ...

随机推荐

  1. SAE网站搭建(1)

    用了半天时间,把Django的基本结构同步到SAE上了,里边比较麻烦的地方如下: 1. 数据库的同步; SAE用的是SQL数据库,默认使用下面的用户名.密码等变量(SAE为我们做了很多工作) 首先需要 ...

  2. Asp.Net MVC4新特性指南(2):新特性介绍

       上一章讲解了最基本的MVC4说明.今天就介绍下几种新特性的使用例子:   就当大家有MVC3的基础了.在这个基础上在看下面的介绍就容易多了.1.Web API MVC4包括一个更好的解决方案:A ...

  3. A Tour of Go Basic types

    Go's basic types are bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr ...

  4. 【三支火把】---C指针总结

    好久没写博客了,重新学习C语言了的基础课程,发现很多东西都忘记的差不多了,闲来无事,总结一下关于指针的知识,希望能帮到像我一样的菜鸟们: 指针,众所周知是C语言的精华所在,不懂指针的话,你就不要说你学 ...

  5. C++ Virtual详解

    转自:http://www.cnblogs.com/xd502djj/archive/2010/09/22/1832912.html Virtual是C++ OO机制中很重要的一个关键字.只要是学过C ...

  6. 部署服务--NLB

    通过服务部署NLB,是对某一层(一层下面可以自定义VM实例数量)服务下的多台VM进行NLB,而不是对多个层进行NLB.需要先进行如下准备: 1.VM需要使用静态IP和静态MAC,所以需要先在进行NLB ...

  7. java transient简单介绍

    我们都知道一个对象仅仅要实现了Serilizable接口,这个对象就能够被序列化,java的这样的序列化模式为开发人员提供了非常多便利,我们能够不必关系详细序列化的过程,仅仅要这个类实现了Serili ...

  8. 2014上海全国邀请赛题解 HDOJ 5090-5099

    HDOJ 5090 水题.从小到大排序,能够填充达到符合条件的.先填充好.填充之后进行调整. 传送门:pid=5090">点击打开链接 #include <cstdio> ...

  9. Unityclient通信測试问题处理(二)

    Unityclient通信測试问题处理(二) 在client的通信測试过程中.场景载入的问题给自己带来了不小的麻烦.由于消息的解析方法在单独的监听线程中调用,这也就意味着无法在消息的解析方法中调用Un ...

  10. android开发入门经验 ADT Bundle环境搭建

    现在有许多做开发的转做移动端开发,做J2EE的转做Android开发,我也把自己的一些入门经验与大家分享一下,希望能给你带来帮助. 工具/原料 JDK,ADT,JAVA 方法/步骤   开发工具的准备 ...