Quartz .Net 配置以及Job使用依赖注入

使用扩展函数的方式在“Util”中进行配置,在 WebHost/Host 中进行使用。

Util中的配置操作

public static IServiceCollection ConfigureQuartz(this IServiceCollection collection, List<Type> jobs,
            IJobFactory jobFactory)
{
     LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());
     var scheduler = new StdSchedulerFactory().GetScheduler().GetAwaiter().GetResult();
     scheduler.JobFactory = jobFactory;
     scheduler.Start();
     var trigger = TriggerBuilder.Create()
         .WithIdentity("bg_trigger", "bg_group")
         .StartNow()
         .WithSimpleSchedule(x => x
             .WithIntervalInSeconds(10)
             .RepeatForever())
         .Build();
     jobs.ForEach(z =>
     {
         var job = JobBuilder.Create(z)
             .Build();
         scheduler.ScheduleJob(job, trigger);
     });
     return collection;
 }

        private class ConsoleLogProvider : ILogProvider
        {
            public Logger GetLogger(string name)
            {
                return (level, func, exception, parameters) =>
                {
                    if (level >= LogLevel.Info && func != null)
                    {
                        Console.WriteLine("[" + DateTime.Now.ToLongTimeString() + "] [" + level + "] " + func(),
                            parameters);
                    }

                    return true;
                };
            }

            public IDisposable OpenNestedContext(string message)
            {
                throw new NotImplementedException();
            }

            public IDisposable OpenMappedContext(string key, object value, bool destructure = false)
            {
                throw new NotImplementedException();
            }
        }

在Host中进行使用

ConfigureServices((hostContext, services) =>
{
    services.ConfigureQuartz(new List<Type>() {typeof(QuartzJob)},
        new DefaultJobFactory(services.BuildServiceProvider()));
})

Host中的 DefaultJobFactory 以及 QuartzJob

  • DefaultJobFactory
public class DefaultJobFactory : IJobFactory
{
    public DefaultJobFactory(IServiceProvider serviceProvider)
    {
        _serviceProvider = serviceProvider;
    }

    private readonly IServiceProvider _serviceProvider;

    public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
    {
        var jobType = bundle.JobDetail.JobType;

        return _serviceProvider.GetService(jobType) as IJob;
    }

    public void ReturnJob(IJob job)
    {
        var disposable = job as IDisposable;
        disposable?.Dispose();
    }
}
  • QuartzJob
public class QuartzJob : IJob
{
 
    public QuartzJob(ISyncBusiness syncBusiness)
    {
        _syncBusiness = syncBusiness;
    }
	// Using DI in Job Class
    private readonly ISyncBusiness _syncBusiness;
    
    public async Task Execute(IJobExecutionContext context)
    {
        await _syncBusiness.DoSomething();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz.NET是一个开源的任务调度框架,它允许你轻松地在.NET应用程序中安排和执行定期任务(也称为cron作业)。V2.6版本提供了一些增强功能和改进,下面是使用Quartz.NET V2.6的一些关键步骤和注意事项: 1. 安装:首先,你需要从NuGet包管理器中安装Quartz.NET使用命令`Install-Package Quartz.Net`。 2. 设置:配置JobScheduler,通常会创建一个ISchedulerFactory实例并初始化Scheduler。在应用程序启动时,调用Scheduler的Start方法开始调度服务。 ```csharp using Quartz; //... var schedulerFactory = new StdSchedulerFactory(); IScheduler scheduler = schedulerFactory.GetScheduler(); scheduler.Start(); ``` 3. 创建Job:定义一个继承自IJob接口的类,并实现Execute方法,这是执行具体任务的地方。 ```csharp public class MyJob : IJob { public void Execute(IJobExecutionContext context) { // 你的业务逻辑 } } ``` 4. 定义Trigger:定义Job执行的时间规则,可以是固定时间、周期性、cron表达式等。 ```csharp ITrigger trigger = TriggerBuilder.Create() .WithSimpleSchedule(x => x.WithIntervalInMilliseconds(5000)) // 每5秒执行一次 .Build(); ``` 5. 安排执行:将Job和Trigger绑定到Scheduler上。 ```csharp scheduler.ScheduleJob(new JobDetail("myJob", "group1", typeof(MyJob)), trigger); ``` 6. 停止调度:在应用程序关闭时,记得停止Scheduler以确保所有任务都被正确处理。 ```csharp scheduler.Shutdown(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值