> 文章列表 > quartz.net 数据库

quartz.net 数据库

quartz.net 数据库

Quartz.NET 数据库介绍

Quartz.NET 是一个开源的任务调度框架,常用于企业级应用程序中的任务调度和处理,其可靠性和灵活性使其成为最受欢迎的调度框架之一。Quartz.NET 同时也提供了一系列数据库操作来支持任务调度程序的数据库记录和操作。在使用 Quartz.NET 时,我们需要理解其数据库架构并且正确地配置 Quartz.NET 才能顺利完成任务调度。

Quartz.NET 数据库架构

Quartz.NET 数据库架构由多张表组成,每个表的作用不同,具体包括:

  • QRTZ_JOB_DETAILS:存储每个已配置的 Job 的信息
  • QRTZ_TRIGGERS:存储每个已配置的 Trigger 的信息。
  • QRTZ_SIMPLE_TRIGGERS:存储 SimpleTrigger 的信息,例如其关联的 Job、Trigger 属性的值等等。
  • QRTZ_CRON_TRIGGERS:存储 CronTrigger 的信息,例如 Cron 表达式、时区等等。
  • QRTZ_JOB_LISTENERS:存储与 Job 相关的 Listener 的信息。
  • QRTZ_TRIGGER_LISTENERS:存储与 Trigger 相关的 Listener 的信息。
  • QRTZ_BLOB_TRIGGERS:存储 BlobTrigger 的信息。

Quartz.NET 数据库配置

对于企业级应用程序的定时任务,建议采用 ADO.NET 数据库集成,以利于后续的更改或维护。在 Visual Studio 中,我们可以通过 NuGet 包管理器引入 Quartz.NET,然后在 App.config 或 Web.config 中添加数据库连接和 Quartz.NET 配置。例如:

```xml

```

上述配置中,我们指定了数据源的数据库类型、连接字符串及其提供程序,调度器的实例名称、实例 ID、线程池的类型和线程数、JobStore 的类型、表前缀和是否集群等信息。具体配置可以根据实际需求进行调整。

Quartz.NET 数据库操作

在使用 Quartz.NET 数据库时,我们可以借助 JobStore 提供的 API 来实现与数据库的增删改查操作。常用的 JobStore API 包括:

  • newJob:新增一个 job。
  • newTrigger:新增一个 trigger。
  • scheduleJob:为一个 job 新增一个 trigger。
  • unscheduleJob:移除一个 trigger 的关联。
  • deleteJob:移除一个 job。
  • jobExists:判断一个 job 是否存在。
  • triggerExists:判断一个 trigger 是否存在。
  • pauseJob:暂停一个 job。
  • resumeJob:恢复一个 job。
  • pauseTrigger:暂停一个 trigger。
  • resumeTrigger:恢复一个 trigger。
  • getJobKeys:获取所有 job 的键。
  • getJobGroupNames:获取所有 job 的组名。
  • getTriggerKeys:获取所有 trigger 的键。
  • getTriggerGroupNames:获取所有 trigger 的组名。

Quartz.NET 应用实例

最后,我们看一下一个简单的 Quartz.NET 应用实例。首先,我们需要定义一个实现 IJob 接口的任务类,例如:

```csharppublic class HelloJob : IJob{ public void Execute(IJobExecutionContext context) { Console.WriteLine("Hello Quartz.NET"); }}```

然后,我们配置 Quartz.NET 和数据库连接,并创建一个调度器。在创建调度器后,可按如下步骤执行任务:

```csharp// 配置 Quartz.NET 和数据库连接NameValueCollection props = new NameValueCollection { { "quartz.dataSource.default.connectionString", "Data Source=.;Initial Catalog=QuartzDB;Persist Security Info=True;User ID=*;Password=*" }, { "quartz.dataSource.default.provider", "SqlServer-20" }, { "quartz.scheduler.instanceName", "SampleScheduler" }, { "quartz.scheduler.instanceId", "AUTO" }, { "quartz.scheduler.skipUpdateCheck", "true" }, { "quartz.threadPool.type", "Quartz.Simpl.SimpleThreadPool, Quartz" }, { "quartz.threadPool.threadCount", "10" }, { "quartz.threadPool.threadPriority", "Normal" }, { "quartz.jobStore.misfireThreshold", "60000" }, { "quartz.jobStore.dataSource", "default" }, { "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" }, { "quartz.jobStore.lockHandler.type", "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" }, { "quartz.jobStore.useProperties", "false" }, { "quartz.jobStore.tablePrefix", "qrtz_" }, { "quartz.jobStore.clustered", "true" }, { "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" }, { "quartz.jobStore.isClustered", "true" }, { "quartz.jobStore.clusterCheckinInterval", "20000" }};StdSchedulerFactory factory = new StdSchedulerFactory(props);Scheduler = await factory.GetScheduler();// 创建任务和触发器var job = JobBuilder.Create() .WithIdentity("job1", "group1") .Build();var trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(5) .RepeatForever()) .Build();// 将任务和触发器关联到调度器中await Scheduler.ScheduleJob(job, trigger);// 启动调度器并等待 10 秒后关闭await Scheduler.Start();await Task.Delay(TimeSpan.FromSeconds(10));await Scheduler.Shutdown();```

在上述代码中,我们创建了一个名为 SampleScheduler 的调度器,定义了任务和触发器的属性,将任务和触发器关联到调度器中后,启动调度器并等待 10 秒后关闭。配置和创建任务的过程已经完成,同时我们还需要注意:

  • 触发器可以设置不同的触发策略,例如 SimpleSchedule、CronSchedule、CalendarIntervalSchedule 等。
  • 任务与触发器可以使用不同的组名来进行关联,可以方便地对任务进行分组和管理。
  • 启动调度器后,我们需要等待一段时间后关闭调度器,否则任务将一直运行直到手动停止。

总结

Quartz.NET 数据库是企业级应用程序中常用的一种任务调度框架,其数据库架构和操作需要掌握,并且合理地配置和使用才能发挥其最大的作用。本文介绍了 Quartz.NET 数据库的概念、架构和操作,同时通过实例演示了如何配置和使用 Quartz.NET 进行任务调度。