C# 实现quartz定时任务数据库持久化
时间: 2023-07-12 10:39:54 浏览: 151
springboot整合quartz,实现数据库方式执行定时任务
5星 · 资源好评率100%
在 C# 中,可以使用 Quartz.NET 来实现定时任务,同时支持数据库持久化。Quartz.NET 是一个功能强大且灵活的开源作业调度库,可以用于创建定时任务和计划任务,支持数据库持久化和集群部署等高级功能。
要使用 Quartz.NET 实现数据库持久化,需要先创建一个用于存储调度程序数据的数据库表,可以使用 Quartz.NET 提供的 SQL 脚本来创建表。然后在应用程序中配置 Quartz.NET,指定数据库类型和连接字符串等信息。示例如下:
```csharp
using Quartz;
using Quartz.Impl;
using Quartz.Impl.AdoJobStore;
using Quartz.Spi;
using System;
using System.Collections.Specialized;
class Program
{
static void Main()
{
Console.WriteLine("Starting scheduler...");
// 创建一个调度程序实例
ISchedulerFactory schedulerFactory = new StdSchedulerFactory(GetSchedulerProperties());
IScheduler scheduler = schedulerFactory.GetScheduler().Result;
// 启动调度程序
scheduler.Start();
Console.WriteLine("Scheduler started.");
// 创建一个作业实例
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
// 创建一个触发器实例,每秒钟触发一次
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.RepeatForever())
.Build();
// 将作业和触发器添加到调度程序中
scheduler.ScheduleJob(job, trigger);
// 等待用户按下 Enter 键退出
Console.ReadLine();
// 关闭调度程序
scheduler.Shutdown();
Console.WriteLine("Scheduler stopped.");
}
static NameValueCollection GetSchedulerProperties()
{
// 配置调度程序属性,指定数据库持久化和相关参数
NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "MyScheduler";
properties["quartz.scheduler.instanceId"] = "AUTO";
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
properties["quartz.jobStore.dataSource"] = "default";
properties["quartz.dataSource.default.provider"] = "SqlServer-20";
properties["quartz.dataSource.default.connectionString"] = "Server=(local);Database=Quartz;Trusted_Connection=True;";
return properties;
}
}
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Hello, Quartz.NET!");
}
}
```
这个示例会创建一个调度程序实例,然后创建一个作业实例和触发器实例,并将它们添加到调度程序中。作业类 HelloJob 实现了 IJob 接口,用于定义作业执行的逻辑。在 GetSchedulerProperties 方法中,配置了调度程序属性,指定了数据库类型和连接字符串等信息。在这个示例中,使用的是 SQL Server 数据库。
需要注意的是,在使用 Quartz.NET 进行数据库持久化时,需要保证数据库连接可靠和高效,同时需要考虑并发执行的问题。可以适当地调整作业和触发器的参数,以达到最优的性能和可靠性。
阅读全文