什么是Quartz.NET
是一个开源的作业调度框架,和Java版本的Quartz非常相似,但是是专门为.NET平台而设计的。用于在.NET应用程序中执行各种类型的定时任务和调度任务。
特点
-
定时任务调度:可以在预定的时间间隔内执行任务,例如每天、每小时或每分钟执行一次。
-
稳定性和可靠性:具有高度稳定和可靠的任务执行机制。可以处理意外的错误和故障,并具备自动重试和失败恢复的能力。
-
灵活的时间规则:它的表达式语法定义复杂的时间规则,以精确控制任务的执行时间。
-
集群和分布式支持:支持集群和分布式部署,可以在多个节点上协调任务调度,实现高可用性和负载均衡。
-
插件和扩展:提供了广泛的插件和扩展机制,根据需求进行配置和扩展,增强其功能和自定义行为。
-
监控和管理功能:提供了监控和管理任务调度的功能,实时查看任务执行情况、重试机制等,并提供了可视化的管理界面。
应用
-
数据报表和分析:定时生成数据报表,并进行相关的数据分析和处理。
-
数据清理和备份:定期执行数据库清理和备份任务,帮助您定期清理不需要的数据、优化数据库性能,并备份重要的数据以防止丢失。
-
定时通知和提醒:定时发送通知和提醒。管理定时任务、提醒用户重要事件或推送业务更新。
-
定时作业调度:用于调度定时作业,例如后台任务和批处理作业。
-
定时任务监控和管理:提供了监控和管理任务调度的功能,实时查看任务执行情况、重试机制、失败处理等。
使用
首先要安装适用于.net的Quartz
其次需要创建在何时去做何事
//时间任务
builder.Services.AddQuartz(m =>
{
//什么事
m.AddJob<Myjob>(m =>
{
m.SetJobData(new JobDataMap()
{
["ABC"] = "123"
});
m.WithIdentity("myjob");
});
//什么时间
m.AddTrigger(x => //注册一个触发器 :触发器定义了作业执行的时间和频率等规则
{
x.WithIdentity("myjob-triggr");
x.WithSimpleSchedule(s =>
{
s.WithInterval(TimeSpan.FromSeconds(5)).WithRepeatCount(1);
});
x.StartAt(DateTime.Now); //起始时间为当前时间
x.ForJob("myjob");
});
});
其次,我们为其举一个例子(三次用户锁定后解锁)
而在上面myiob事件中,定义一个类去书写解锁的逻辑代码
/// <summary>
/// 计划任务
/// </summary>
public class Myjob : IJob
{
private readonly ILogger<Myjob> logger;
private readonly IBaseRespository<User> user;
public Myjob(ILogger<Myjob> logger, IBaseRespository<User> user)
{
this.logger = logger;
this.user = user;
}
public Task Execute(IJobExecutionContext context)
{
//两分钟内解锁用户锁定
//找到数据库中的锁定和次数
var lsit = user.GetAll().Where(m => m.Islock ==true && m.ErrorCount == 3);
//循环改变
foreach (var item in lsit)
{
item.ErrorCount = 0;
item.Islock = false;
}
user.SaveChange();
var list = context.MergedJobDataMap["myjob"];
return Task.FromResult(true);
}
}