Quartz.Net的使用(一)

      之前使用自动任务的,会写一个程序通过使用windows任务计划来调度,其实.net下有自动任务框架可以使用,一直没有拿来用,现在准备用下,所以找了些资料学习了下,记录下。

安装Install-Package Quartz -Version 2.5.0 我使用的2.5的版本来进行测试 目前已经到3.X版本了

主要是三个dll,Common.Logging.dll,Common.Logging.Core.dll,Quartz.dll

接下来就可以做简单的测试了,大概步骤如下:

1.继承作业接口Ijob建立job

2.建立作业调度器Scheduler

3.通过JobBuilder生成一个任务job

4.通过TriggerBuilder建立一个触发器trigger

5.将job和trigger加入调度器Scheduler中

创建一个任务 通过继承接口IJob需要实现Execute方法

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

namespace quartzdemo
{
    public class demojob1:IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("execute job");
        }
    }
}

创建调度器

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

namespace quartzdemo
{
    public class demoscheule
    {
        public static void start(){
            //-------demo1 无参数 简单调用的方法-----------------
            ISchedulerFactory schedulefactory = new StdSchedulerFactory();//实例化调度器工厂
            IScheduler scheduler = schedulefactory.GetScheduler();//实例化调度器
            scheduler.Start();
            IJobDetail job1 = JobBuilder.Create()//创建一个作业
                .WithIdentity("demojob1", "groupa")
                .Build();

            ITrigger trigger1 = TriggerBuilder.Create()//创建一个触发器
                .WithIdentity("demotrigger1", "groupa")
                .StartNow()
                .WithSimpleSchedule(b => b.WithIntervalInSeconds(5)//5秒执行一次
                .RepeatForever())//无限循环执行
                .Build();

            scheduler.ScheduleJob(job1, trigger1);//把作业,触发器加入调度器
        }
    }
}

将此调度器执行

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

namespace quartzdemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("job start");
            demoscheule.start();
            Console.ReadKey();
        }
    }
}

执行后就会出现如下结果

Quartz.Net的使用(一)_第1张图片

使用JobDataMap

如果任务中需要带参数,Quartz.Net也是支持的 可以通过JobDataMap来进行参数的传递

我们只需要修改下Job方法和创建job的JobBuilder中加入参数就可以

新的job方法接收参数id

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

namespace quartzdemo
{
    public class demojob2:IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            JobDataMap dataMap = context.JobDetail.JobDataMap;

            string str = dataMap.GetString("id");

            Console.WriteLine("execute job:{0}",str);
        }
    }
}

修改后的调度器

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

namespace quartzdemo
{
    public class demoscheule
    {
        public static void start(){
            ISchedulerFactory schedulefactory = new StdSchedulerFactory();//实例化调度器工厂
            IScheduler scheduler = schedulefactory.GetScheduler();//实例化调度器
            scheduler.Start();

            //------------demo2 带参数的调用方法

            IJobDetail job2 = JobBuilder.Create()
                .WithIdentity("demojob2", "groupa")
                .UsingJobData("id", "1")
                .Build();

            ITrigger trigger2 = TriggerBuilder.Create()
                .WithIdentity("demotrigger2", "groupa")
                .StartNow()
                .WithSimpleSchedule(b => b.WithIntervalInSeconds(3).WithRepeatCount(2))//3秒执行一次执行两次后停止  开始运行会执行一次
                .Build();

            scheduler.ScheduleJob(job2, trigger2);
        }
    }
}

执行后的结果

通过配置文件来进行任务调度

上面我们进行任务调度都是通过代码来实现的,当我们要修改调度规则的时候就要重新编译代码这是很不方便的,Quartz.Net提供了通过配置文件的方式来进行操作

首先我们在web.config或app.config里进行配置节点的数据



  
  
    

然后新建任务配置文件quartz_jobs.xml

我们通过nuget安装的时候在项目中应该有一个job_scheduling_data_2_0.xsd文件

打开quartz_jobs.xml是选择工具栏XML然后选择架构,导入job_scheduling_data_2_0.xsd,之后你写着个任务配置的时候就会有提示了

Quartz.Net的使用(一)_第2张图片

配置文件如下

此文件要在属性中设置“始终复制”到输出目录




  
  
    true
  

  

    
      demojob1
      groupa
      demo
      quartzdemo.demojob1,quartzdemo
      true
      false
    

    
      
        demotrigger1
        groupa
        demo
        demojob1
        groupa
        SmartPolicy
        -1
        3000
      
    
  

参考:http://www.cnblogs.com/mushroom/p/4067037.html

            https://blog.csdn.net/hao_ds/article/details/42418877

            https://www.cnblogs.com/blackice/p/5590881.html

你可能感兴趣的:(Quartz.Net)