栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Quartz.Net在Asp.NetCore中的应用

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Quartz.Net在Asp.NetCore中的应用

根据官方例子整理,作为笔记备忘,当前使用.netcore3.1引入的是quartz.aspnetcore 3.2.4版,在startup中进行配置;

1、基本设置
public void ConfigureServices(IServiceCollection services)
{
     services.AddQuartzServer(options => { options.WaitForJobsToComplete = true; });
     services.AddQuartz(q =>
     {
        q.SchedulerId = "Scheduler-Core";
        q.SchedulerName = "WebApi Quartz Demo";
        q.UseMicrosoftDependencyInjectionJobFactory(options =>
              {
                 options.CreateScope = false;
              }
        );
        q.UseSimpleTypeLoader();
        q.UseInMemoryStore();
        q.UseDedicatedThreadPool(tp => { tp.MaxConcurrency = 10; });
     }
}
2、此处记录四种添加job和trigger的方式
  1. 方式一,使用ScheduleJob快速构建
                    q.ScheduleJob(trigger =>
                    {
                        trigger.WithIdentity("SingleTrigger").StartNow()
                            .WithSimpleSchedule(
                                action =>
                                {
                                    action.WithIntervalInSeconds(10).WithRepeatCount(3);
                                }).WithDescription("此任务只拥有单一的trigger");
                    });

     

  2. 方式二,使用AddJob和AddTrigger添加,可以同一个job添加多个trigger 
                    var jobKey = new JobKey("apiDemoJob", "apiDemoJobGroup");
                    q.AddJob(options => { options.WithIdentity(jobKey).WithDescription("asp.netApi 样例"); });
                    
                    q.AddTrigger(t =>
                    {
                        t.WithIdentity("apiDemoTrigger").ForJob(jobKey).StartNow().WithCronSchedule("0 0/2 * * * ?")
                            .WithDescription("asp.netApi Trigger");
                    });

     

  3.  方式三,通过config配置job和trigger,需引用Quartz.plugins3.2.4
    q.UseXmlSchedulingConfiguration(x =>
    {
       x.Files = new[] { "~/quartz_jobs.config" };
       x.ScanInterval = TimeSpan.FromMinutes(1);
       x.FailOnFileNotFound = true;
       x.FailOnSchedulingError = true;
    });
                    
    //需要注入job 获取GitHub还没发布的版本测试不需要注入
    services.AddTransient();
    
    q.UseMicrosoftDependencyInjectionJobFactory(options =>
    {
        //此处不设置会有报错,不过任务也能正常执行,github上最新的已移除此属性
        options.AllowDefaultConstructor = true; 
        options.CreateScope = false;
     }
    );
    
    
    
      
        true
      
    
      
    
        
          XML Job
          XML Job Group
          Job configured via XML
          QuartzWebApi.SampleJob,QuartzWebApi
          
          true
          false
          
            
              key0
              value0
            
            
              key1
              value1
            
            
              key2
              value2
            
          
        
    
        
          
            XML Trigger
            SimpleTriggerDescription
            XML Job
            XML Job Group
            1982-06-28T18:15:00.0Z
            2040-05-04T18:13:51.0Z
            SmartPolicy
            2
            30000
          
        
    
      
    
    

     

  4. 方法四,通过QuartzOptions配置
                //需要注入job
                services.AddTransient();
                services.Configure(Configuration.GetSection("Sample"));
                services.AddOptions().Configure>((options, dep) =>
                {
                    if (!string.IsNullOrEmpty(dep.Value.CronSchedule))
                    {
                        var jobKey = new JobKey("optionsCustomJob", "customGroup");
                        options.AddJob(j => j.WithIdentity(jobKey));
                        options.AddTrigger(trigger =>
                        {
                            trigger.WithIdentity("optionsTrigger",
                                "customGroup").ForJob(jobKey).WithCronSchedule(dep.Value.CronSchedule);
                        });
                    }
                });
    
    
    
      //"Sample": {
      //  "CronSchedule": "0/25 * * * * ?"
      //}

    配置好之后直接运行就可以了,不需要其它额外设定,真的好方便,部署到IIS中还是要注意资源回收的问题。

     
3、参考资料:
  • Github:Quartz.Net源码
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号