一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - .net core中Quartz的使用方法

.net core中Quartz的使用方法

2019-06-19 17:09♀影☆響 ASP.NET教程

這篇文章主要介紹了.net core中Quartz的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

原來(lái)工作中有用到定時(shí)任務(wù)Quartz,不過(guò)是在MVC項(xiàng)目中,現(xiàn)在net core項(xiàng)目中也要用到,就開(kāi)始改版。中間發(fā)現(xiàn)在網(wǎng)上的教程只有執(zhí)行定時(shí)計(jì)劃的過(guò)程,卻很少有人寫(xiě)注冊(cè)的過(guò)程,覺(jué)得有點(diǎn)略坑。所以寫(xiě)此文章一是自己做個(gè)記錄,二是希望能幫助到其他人。后面還把此功能做出了多任務(wù)定時(shí)執(zhí)行,網(wǎng)上關(guān)于net core的教程更是少了,花費(fèi)了不少時(shí)間實(shí)現(xiàn)了出來(lái)。

Quartz版本:3.0.7

1.NuGet中下載安裝Quartz

2.新建Quartz幫助類(lèi)

(1)新建QuartzJob類(lèi),代碼如下:

public class QuartzJob : IJob
  {
    public async Task Execute(IJobExecutionContext context)
    {
      var jobKey = context.JobDetail.Key;//獲取job信息
      var triggerKey = context.Trigger.Key;//獲取trigger信息

      LogHelper.Info($"{DateTime.Now} QuartzJob:==>>自動(dòng)執(zhí)行.{jobKey.Name}|{triggerKey.Name}");
      await Task.CompletedTask;
    }
  }

ps: 上面代碼中的jobKey和triggerKey可獲取到自己定義的job和trigger的信息,這樣做多任務(wù)時(shí)可區(qū)分要執(zhí)行的是哪個(gè)任務(wù). 另LogHelper.Info是自己封裝好的日子記錄類(lèi),可替換為自己的日志類(lèi)

(2)新建QuartzFactory類(lèi),代碼如下:

public class QuartzFactory : IJobFactory
  {
    private readonly IServiceProvider _serviceProvider;

    public QuartzFactory(IServiceProvider serviceProvider)
    {
      _serviceProvider = serviceProvider;
    }

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

      var job = (IJob)_serviceProvider.GetService(jobDetail.JobType);
      return job;
    }

    public void ReturnJob(IJob job)
    {
    }
  }

(3)新建QuartzService類(lèi),代碼如下:

#region 單任務(wù)
    public static void StartJob<TJob>() where TJob : IJob
    {
      var scheduler = new StdSchedulerFactory().GetScheduler().Result;

      var job = JobBuilder.Create<TJob>()
        .WithIdentity("job")
        .Build();

      var trigger1 = TriggerBuilder.Create()
        .WithIdentity("job.trigger")
        .StartNow()
        .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
        .ForJob(job)
        .Build();

      scheduler.AddJob(job, true);
      scheduler.ScheduleJob(job, trigger1);
      scheduler.Start();
    }
    #endregion

    #region 多任務(wù)
    public static void StartJobs<TJob>() where TJob : IJob
    {
      var scheduler = new StdSchedulerFactory().GetScheduler().Result;

      var job = JobBuilder.Create<TJob>()
        .WithIdentity("jobs")
        .Build();

      var trigger1 = TriggerBuilder.Create()
        .WithIdentity("job.trigger1")
        .StartNow()
        .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
        .ForJob(job)
        .Build();

      var trigger2 = TriggerBuilder.Create()
        .WithIdentity("job.trigger2")
        .StartNow()
        .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(11)).RepeatForever())
        .ForJob(job)
        .Build();

      var dictionary = new Dictionary<IJobDetail, IReadOnlyCollection<ITrigger>>
      {
        {job, new HashSet<ITrigger> {trigger1, trigger2}}
      };
      scheduler.ScheduleJobs(dictionary, true);
      scheduler.Start();
    }
    #endregion

    #region 配置
    public static void AddQuartz(this IServiceCollection services, params Type[] jobs)
    {
      services.AddSingleton<IJobFactory, QuartzFactory>();
      services.Add(jobs.Select(jobType => new ServiceDescriptor(jobType, jobType, ServiceLifetime.Singleton)));

      services.AddSingleton(provider =>
      {
        var schedulerFactory = new StdSchedulerFactory();
        var scheduler = schedulerFactory.GetScheduler().Result;
        scheduler.JobFactory = provider.GetService<IJobFactory>();
        scheduler.Start();
        return scheduler;
      });
    }
    #endregion

3.在Startup.cs中注冊(cè)代碼

public void ConfigureServices(IServiceCollection services)
{
      services.AddQuartz(typeof(QuartzJob));

      //........
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
  QuartzService.StartJobs<QuartzJob>();
  //........
}

 ps: 因AddQuartz方法定義的是Type[]類(lèi)型,所以可傳多個(gè)執(zhí)行類(lèi),如:services.AddQuartz(typeof(QuartzJob1), typeof(QuartzJob2)); 不過(guò)這樣做StartJob()方法就得另處理下,這里就略過(guò)

OK,大功告成,這個(gè)東西折騰了兩天終于塵埃落定了,執(zhí)行結(jié)果如下:

.net core中Quartz的使用方法

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性夜夜春夜夜爽AA片A | 3d蒂法精品啪啪一区二区免费 | 国产欧美日韩视频在线观看一区二区 | 国产农村一级特黄α真人毛片 | 免费视频观看 | 美国大片成人性网 | 岛国片免费观看 | 日本视频一区在线观看免费 | 亚洲日韩欧美一区二区在线 | 热久久免费 | 亚洲人成网站在线观看播放青青 | 极品奶妈漫画 | nhdta系列媚药系列 | 99视频在线看观免费 | 日韩免费视频播放 | 99热精品在线免费观看 | 日韩精品欧美 | 亚洲国产精品自在在线观看 | 精品一区二区三区 不卡高清 | 朝鲜女人free性xxe | 我的男友是消防员在线观看 | 午夜精品久久久内射近拍高清 | 国产精品日韩欧美一区二区 | 国产成人欧美视频在线 | 久久天天综合 | 99视频免费 | 白丝校花被扒开双腿喷水小说 | 强制高h | 香蕉国产人午夜视频在线 | 欧美vpswindows | 1986葫芦兄弟全集免费观看第十集 | 精品一卡2卡3卡4卡5卡亚洲 | 国产精品va在线观看手机版 | 国产青草视频在线观看免费影院 | 欧美猛男同志video在线 | 亚洲欧美7777 | 香蕉在线精品亚洲第一区 | 鸭子玩富婆流白浆视频 | 国产精品久久久久久久福利院 | 视频在线观看高清免费看 | 男人的j放进女人的p全黄 |