最近公司的做的项目中涉及到配置任务地址然后按照配置去目标地址提取相关的数据,所以今天上午在Internet上查看有关定时任务(调度任务)的相关信息,筛选半天然后查找到Quartz.net。

Quartz.net概述:

Quartz.net是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。 Quartz.NET允 许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。

接下来说一下怎么安装并使用:

1、首先建立一个名称为“TestQuartz.net”的控制台项目,然后使用Nuget安装Quartz.net,

Quartz.net(调度框架) 使用Mysql作为存储

由于项目中使用Mysql存储调度框架的相关,所以需要下载Quartz.net能用的mysql .net数据驱动文件。

这个是对应关系:

  • SqlServer-20 - SQL Server driver for .NET Framework 2.0
  • OracleODP-20 - Oracle's Oracle Driver
  • OracleODPManaged-1123-40 Oracle's managed driver for Oracle 11
  • OracleODPManaged-1211-40 Oracle's managed driver for Oracle 12
  • MySql-50 - MySQL Connector/.NET v. 5.0 (.NET 2.0)
  • MySql-51 - MySQL Connector/:NET v. 5.1 (.NET 2.0)
  • MySql-65 - MySQL Connector/:NET v. 6.5 (.NET 2.0)
  • SQLite-10 - SQLite ADO.NET 2.0 Provider v. 1.0.56 (.NET 2.0)
  • Firebird-201 - Firebird ADO.NET 2.0 Provider v. 2.0.1 (.NET 2.0)
  • Firebird-210 - Firebird ADO.NET 2.0 Provider v. 2.1.0 (.NET 2.0)
  • Npgsql-20 - PostgreSQL Npgsql

经过我反复测试MySql-65对应的驱动版本为:MySql.Data 6.5.4 版本。

这下在vs的“工具”菜单中找到“NUGET程序包管理器”并点击“程序包管理控制台”

Quartz.net(调度框架) 使用Mysql作为存储

打开界面如下:

Quartz.net(调度框架) 使用Mysql作为存储

输入 Install-Package MySql.Data -Version 6.5.4 并输入回车安装

2、在项目中新建DemoJob的类并继承IJob接口(Ijob是Quartz.net的接口)

代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using Quartz;
 7 
 8 namespace TestQuartz.net
 9 {
10     public class DemoJob : IJob
11     {
12         public void Execute(IJobExecutionContext context)
13         {
14             Console.WriteLine(string.Format("{0}执行一次", DateTime.Now));
15         }
16     }
17 }

 然后打开“Program.cs”的类文件,并编辑为如下代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Collections.Specialized;
 4 using System.IO;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading;
 8 using System.Threading.Tasks;
 9 using Common.Logging;
10 using Quartz;
11 using Quartz.Impl;
12 
13 namespace TestQuartz.net
14 {
15     public class Program
16     {
17         static void Main(string[] args)
18         {
19             IntQuartz();
20 
21         }
22         static void IntQuartz()
23         {
24             //1.首先创建一个作业调度池
25             var properties = new NameValueCollection();
26             //存储类型
27             properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX,Quartz";
28             //表明前缀
29             properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
30             //驱动类型
31             properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.MySQLDelegate,Quartz";
32             //数据源名称
33             properties["quartz.jobStore.dataSource"] = "myDS";
34             //连接字符串
35             properties["quartz.dataSource.myDS.connectionString"] = "Server=192.168.0.141;Database=test;Uid=root;Pwd=root";
36             //版本
37             properties["quartz.dataSource.myDS.provider"] = "MySql-65";
38             //最大链接数
39             //properties["quartz.dataSource.myDS.maxConnections"] = "5";
40             // First we must get a reference to a scheduler
41             var schedulerFactory = new StdSchedulerFactory(properties);
42             var scheduler = schedulerFactory.GetScheduler();
43             scheduler.Start();
44         }
45     }
46 }

 

3、需要我们在MySql中建立数据库和相应的数据表,不用发愁开源的项目中作者已为我们准备好了数据库建立表的语句(打开此链接并复制数据库语句执行)。

有啦数据库后你会很兴奋,直接写t-sql操作数据库多么便捷啊,并且所有的任务调度信息都一目了然,这里我要告诉你的事,你不需要直接写sql语句,quart提供的类库就能自动对数据库进行填充,以完成对任务调度的管理操作。

4、操作事例:

添加一个任务并开始执行,代码如下:

 1  private static void Insert()
 2         {
 3 
 4             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
 5             DateTime StarTime = DateTime.Now;
 6             DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(StarTime, 1);
 7             DateTime EndTime = DateTime.MaxValue.AddDays(-1);
 8             DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(EndTime, 1);
 9             IJobDetail job = JobBuilder.Create<DemoJob>()
10               .WithIdentity("j1", "g1")
11               .WithDescription("注释")
12               .Build();
13             ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
14                                          .StartAt(starRunTime)//指定运行时间
15                                          .EndAt(endRunTime)//指定结束时间
16                                          .WithIdentity("j1", "g1")
17                                          .WithCronSchedule("0/5 * * * * ?")//运行模式 每十秒钟运行一次
18                                          .WithDescription("注释")
19                                          .Build();
20             scheduler.ScheduleJob(job, trigger);
21             scheduler.Start();
22         }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-09
  • 2021-04-22
  • 2021-07-08
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-02-19
  • 2022-02-23
  • 2022-12-23
相关资源
相似解决方案