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<demojob1>()//创建一个作业
                .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();
        }
    }
}

执行后就会出现如下结果

使用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<demojob2>()
                .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></quartz>节点的数据

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--需方到开始的位置 刚开始放到statuup位置下面一直报错调整了下位置就ok了-->
  <configSections>
    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <quartz>
    <add key="quartz.scheduler.instanceName" value="ServerScheduler" />

    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="10" />
    <add key="quartz.threadPool.threadPriority" value="Normal" />

    <add key="quartz.plugin.xml.type" value = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz" />
    <add key="quartz.plugin.xml.fileNames" value = "quartz_jobs.xml" />

    <add key="quartz.jobStore.misfireThreshold" value="60000" />
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
  </quartz>

</configuration>

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

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

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

配置文件如下

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

<?xml version="1.0" encoding="utf-8" ?>

<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 				version="2.0">
  
  <processing-directives>
    <overwrite-existing-data>true</overwrite-existing-data>
  </processing-directives>

  <schedule>

    <job>
      <name>demojob1</name>
      <group>groupa</group>
      <description>demo</description>
      <job-type>quartzdemo.demojob1,quartzdemo</job-type>
      <durable>true</durable>
      <recover>false</recover>
    </job>

    <trigger>
      <simple>
        <name>demotrigger1</name>
        <group>groupa</group>
        <description>demo</description>
        <job-name>demojob1</job-name>
        <job-group>groupa</job-group>
        <misfire-instruction>SmartPolicy</misfire-instruction>
        <repeat-count>-1</repeat-count>
        <repeat-interval>3000</repeat-interval>
      </simple>
    </trigger>
  </schedule>
</job-scheduling-data>

参考: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

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Quartz.NET是一个开源的任务调度框架,它允许你轻松地在.NET应用程序中安排和执行定期任务(也称为cron作业)。V2.6版本提供了一些增强功能和改进,下面是使用Quartz.NET V2.6的一些关键步骤和注意事项: 1. 安装:首先,你需要从NuGet包管理器中安装Quartz.NET使用命令`Install-Package Quartz.Net`。 2. 设置:配置JobScheduler,通常会创建一个ISchedulerFactory实例并初始化Scheduler。在应用程序启动时,调用Scheduler的Start方法开始调度服务。 ```csharp using Quartz; //... var schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = schedulerFactory.GetScheduler(); scheduler.Start(); ``` 3. 创建Job:定义一个继承自IJob接口的类,并实现Execute方法,这是执行具体任务的地方。 ```csharp public class MyJob : IJob { public void Execute(IJobExecutionContext context) { // 你的业务逻辑 } } ``` 4. 定义Trigger:定义Job执行的时间规则,可以是固定时间、周期性、cron表达式等。 ```csharp ITrigger trigger = TriggerBuilder.Create() .WithSimpleSchedule(x => x.WithIntervalInMilliseconds(5000)) // 每5秒执行一次 .Build(); ``` 5. 安排执行:将Job和Trigger绑定到Scheduler上。 ```csharp scheduler.ScheduleJob(new JobDetail("myJob", "group1", typeof(MyJob)), trigger); ``` 6. 停止调度:在应用程序关闭时,记得停止Scheduler以确保所有任务都被正确处理。 ```csharp scheduler.Shutdown(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值