zoukankan      html  css  js  c++  java
  • 轻装上阵:无配置文件情况下使用Quartz.NET

    写博客写上瘾了,怎么办?

    本来没打算写这篇随笔,但是今天突然解决了Quartz.NET的一个问题,实在想分享一下。网上搜索到的一堆Quartz.NET文章,都是谈如何通过配置文件来使用Quartz.NET。

    我们只是想简单使用一下,取代原来在Windows中使用的任务计划,每天定时发两封提醒邮件,实在不想在一堆配置中挣扎。

    先简单介绍一下Quartz.NET

    Quartz.NET是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。

    以上简介内容引用自leeolevis写的“Quartz.NET作业调度框架详解”。

    下面我们用几行代码搞定它。

    1. 定义要执行的任务(实现Quartz.IJob接口),代码如下:

    复制代码
    publicclass ShiftNotify : IJob { publicvoid Execute(JobExecutionContext context) { //在此执行计划任务 //比如:“时间不早了,该起床啦!” } }
    复制代码

    2. 将要计划执行的任务加入到调度器中。

    完成这一步,需要三样东西:调度器(IScheduler)、任务(JobDetail)、触发器(Trigger)。

    由于是在Web应用程序中进行调度,代码需要写在Global.asax.cs的Application_Start()方法中。

    a) 创建一个调度器(职责:如果触发器设定的条件满足,就让预先定义好的任务干活):

    ISchedulerFactory factory =new StdSchedulerFactory(); IScheduler scheduler = factory.GetScheduler(); scheduler.Start();

    b) 创建一个任务(第1步已经定义好的任务,真正干活的):

    JobDetail job =new JobDetail("MyJob", typeof(ShiftNotify));

    c) 创建一个触发器(从什么时间开始,多长时间触发一次):

    Trigger trigger = TriggerUtils.MakeMinutelyTrigger(1); trigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.UtcNow); trigger.Name ="ShiftNotify";

    第一行代码设置的是1分钟触发一次。

    第二行代码设置的是开始时间。之前遇到的问题就出现在这里。将DateTime.UtcNow写成了DateTime.Now,怎么也触发不了。

    d) 将任务与触发器添加到调度器中:

    scheduler.ScheduleJob(job, trigger);

    好了,完工!

    不需要任何配置文件,Quartz.NET就按你的指令,定时为你服务了。

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/mili3/p/3075830.html
Copyright © 2011-2022 走看看