zoukankan      html  css  js  c++  java
  • quartz的配置

    Quartz.Net中的概念:计划者(IScheduler)、工作(IJob)、触发器(Trigger)。给计划者一个工作,让他在Trigger(什么条件下做这件事)触发的条件下执行这个工作
    将要定时执行的任务的代码写到实现IJob接口的Execute方法中即可,时间到来的时候Execute方法会被调用。
    CrondTrigger是通过Crond表达式设置的触发器,还有 SimpleTrigger等简单的触发器。可以通过TriggerUtils的MakeDailyTrigger、MakeHourlyTrigger等方法简化调用。调用代码参考备注。
    初始化定时和结束定时的代码放到哪里(Application_Start,Application_End)
    
    1.先在bin文件夹中引用Quartz.Net的dll 文件
    
    Common.Logging.dll,Quartz.dll
    
    2.Global文件中的Application_Start。
    [csharp] view plaincopy
    
        //从配置中读取任务启动时间  
                    int indexStartHour = Convert.ToInt32(ConfigurationManager.AppSettings["IndexStartHour"]);  
                    int indexStartMin = Convert.ToInt32(ConfigurationManager.AppSettings["IndexStartMin"]);  
          
          
                    ISchedulerFactory sf = new StdSchedulerFactory();//执行者  
                    sched = sf.GetScheduler();  
          
                    JobDetail job = new JobDetail("job1", "group1", typeof(TestJob));//TestJob为实现了IJob接口的类,(工作名称,分组,那个类)  
                    Trigger trigger = TriggerUtils.MakeDailyTrigger("tigger1", indexStartHour, indexStartMin);//每天10点00分执行  
                    trigger.JobName = "job1";  
                    trigger.JobGroup = "group1";  
                    trigger.Group = "group1";  
          
                    sched.AddJob(job, true);  
                    sched.ScheduleJob(trigger);  
                    sched.Start();  
    
    
    3.Application_End时
    
    sched.Shutdown(true);//结束时关掉
    
    4.具体要执行的代码在TestJob中的 public void Execute(JobExecutionContext context)方法中
    下面我们用几行代码搞定它。
    
    1. 定义要执行的任务(实现Quartz.IJob接口),代码如下:
    
    public class ShiftNotify : IJob
    {
    public void 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就按你的指令,定时为你服务了。
    
  • 相关阅读:
    vue强制更新$forceUpdate()
    js数组拼接成字符串,去除最后一个逗号
    JavaScript数组遍历:for、foreach、for in、for of、、().each的区别
    json.stringify()的妙用,json.stringify()与json.parse()的区别
    第四次博客作业-结对项目
    于达——第九次作业
    于达——第八次作业
    软件工程第三次作业——关于软件质量保障初探
    于达——第七次作业
    于达——第六次作业
  • 原文地址:https://www.cnblogs.com/hualiu0/p/4946836.html
Copyright © 2011-2022 走看看