最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.net core中Quartz的使用方法

 更新時(shí)間:2019年03月09日 10:57:00   作者:♀影☆響  
這篇文章主要介紹了.net core中Quartz的使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

Quartz版本:3.0.7

1.NuGet中下載安裝Quartz

2.新建Quartz幫助類

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

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是自己封裝好的日子記錄類,可替換為自己的日志類

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

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類,代碼如下:

#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[]類型,所以可傳多個(gè)執(zhí)行類,如:services.AddQuartz(typeof(QuartzJob1), typeof(QuartzJob2)); 不過這樣做StartJob()方法就得另處理下,這里就略過

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vscode extension插件開發(fā)詳解

    vscode extension插件開發(fā)詳解

    這篇文章主要介紹了vscode extension插件開發(fā),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • .NET程序性能監(jiān)控系統(tǒng)Elastic?AMP的使用方法

    .NET程序性能監(jiān)控系統(tǒng)Elastic?AMP的使用方法

    這篇文章介紹了.NET程序性能監(jiān)控系統(tǒng)Elastic?AMP的使用方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • ASP.NET 2.0 URL映射技巧

    ASP.NET 2.0 URL映射技巧

    ASP.NET 2.0 URL映射技巧...
    2007-05-05
  • asp.net TreeView遞歸循環(huán)子節(jié)點(diǎn)生成樹形菜單實(shí)例

    asp.net TreeView遞歸循環(huán)子節(jié)點(diǎn)生成樹形菜單實(shí)例

    這篇文章主要介紹了asp.net TreeView遞歸循環(huán)子節(jié)點(diǎn)生成樹形菜單的方法,涉及asp.net遞歸算法及節(jié)點(diǎn)操作相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • .NET連接池的問題詳解

    .NET連接池的問題詳解

    這篇文章主要介紹了.NET連接池的問題詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 如何實(shí)現(xiàn)ListView高效分頁代碼

    如何實(shí)現(xiàn)ListView高效分頁代碼

    ListView選擇自動(dòng)分頁時(shí) 其實(shí)就是添加了一個(gè)DataPager分頁控件兩者間存在著嵌套關(guān)系《Repeater與ListView》中提到這樣的分頁并不是高效的 因?yàn)閿?shù)據(jù)源還是返回了所有的數(shù)據(jù) 而非當(dāng)前頁數(shù)據(jù)
    2013-02-02
  • ASP.NET?Core?EFCore?屬性配置與DbContext的用法詳解

    ASP.NET?Core?EFCore?屬性配置與DbContext的用法詳解

    實(shí)體屬性配置是定義模型與數(shù)據(jù)庫映射的核心,EFCore 提供兩種方式:數(shù)據(jù)注解和?Fluent API,本文將深入探討ASP.NET Core中EFCore的實(shí)體屬性配置方法及DbContext的核心用法,感興趣的朋友一起看看吧
    2025-05-05
  • asp.net 截取Http請(qǐng)求的實(shí)現(xiàn)代碼

    asp.net 截取Http請(qǐng)求的實(shí)現(xiàn)代碼

    本篇文章比較短,主要是因?yàn)槲业囊粋€(gè)隨想產(chǎn)生的一段代碼。 這段代碼的功能你可以叫做是簡單的Http服務(wù)器也可以叫做Http請(qǐng)求截取。它實(shí)現(xiàn)的功能就是截取Http請(qǐng)求然后自己做處理。
    2010-06-06
  • ASP.NET中相對(duì)路徑的使用總結(jié)

    ASP.NET中相對(duì)路徑的使用總結(jié)

    在.cs頁面中輸入Response.Write(Request.MapPath(1.jpg))這可以輸出圖片的物理路徑也就是這張圖片在服務(wù)器上存放的具體路徑,下面為大家講解下相對(duì)路徑的應(yīng)用
    2013-08-08
  • asp.net mvc 從數(shù)據(jù)庫中讀取圖片的實(shí)現(xiàn)代碼

    asp.net mvc 從數(shù)據(jù)庫中讀取圖片的實(shí)現(xiàn)代碼

    今天搞了一天的MVC,在顯示圖片的時(shí)候老是出現(xiàn)問題,從網(wǎng)上搜索了好久,才找到解決方法。
    2010-05-05

最新評(píng)論

金阳县| 津市市| 宁夏| 任丘市| 陇南市| 敦煌市| 高淳县| 商城县| 新平| 前郭尔| 珠海市| 江都市| 佛坪县| 长宁区| 渭南市| 潮州市| 桂平市| 友谊县| 类乌齐县| 巴塘县| 余庆县| 普陀区| 武宣县| 客服| 盐池县| 吉林市| 云梦县| 武平县| 栾川县| 金沙县| 奎屯市| 通辽市| 绥化市| 鄂托克旗| 双柏县| 射阳县| 翼城县| 磴口县| 石景山区| 大埔区| 娄底市|