Quartz.NET

  什么是Quartz.NET

      是一个开源的作业调度框架,和Java版本的Quartz非常相似,但是是专门为.NET平台而设计的。用于在.NET应用程序中执行各种类型的定时任务和调度任务。

特点
  1. 定时任务调度:可以在预定的时间间隔内执行任务,例如每天、每小时或每分钟执行一次。

  2. 稳定性和可靠性:具有高度稳定和可靠的任务执行机制。可以处理意外的错误和故障,并具备自动重试和失败恢复的能力。

  3. 灵活的时间规则:它的表达式语法定义复杂的时间规则,以精确控制任务的执行时间。

  4. 集群和分布式支持:支持集群和分布式部署,可以在多个节点上协调任务调度,实现高可用性和负载均衡。

  5. 插件和扩展:提供了广泛的插件和扩展机制,根据需求进行配置和扩展,增强其功能和自定义行为。

  6. 监控和管理功能:提供了监控和管理任务调度的功能,实时查看任务执行情况、重试机制等,并提供了可视化的管理界面。

 应用
  1. 数据报表和分析:定时生成数据报表,并进行相关的数据分析和处理。

  2. 数据清理和备份:定期执行数据库清理和备份任务,帮助您定期清理不需要的数据、优化数据库性能,并备份重要的数据以防止丢失。

  3. 定时通知和提醒:定时发送通知和提醒。管理定时任务、提醒用户重要事件或推送业务更新。

  4. 定时作业调度:用于调度定时作业,例如后台任务和批处理作业。

  5. 定时任务监控和管理:提供了监控和管理任务调度的功能,实时查看任务执行情况、重试机制、失败处理等。

使用 

        首先要安装适用于.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);
    }
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值