• Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)


    QuartzHostedService  是一个用来在Asp.Net Core 中实现 Quartz 的任务注入依赖的nuget 包:

    基本示例如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using AspNetCoreSampleQuartzHostedService.Jobs;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Options;
    using Quartz;
    using QuartzHostedService;
    
    namespace AspNetCoreSampleQuartzHostedService
    {
        public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
                services.AddOptions();
                services.Configure<AppSettings>(Configuration);
                services.Configure<InjectProperty>(options => { options.WriteText = "This is inject string"; });
                services.AddQuartzHostedService()
                        .AddQuartzJob<HelloJob>()
                        .AddQuartzJob<InjectSampleJob>()
                        .AddQuartzJob<HelloJobSingle>()
                        .AddQuartzJob<InjectSampleJobSingle>();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<AppSettings> settings)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                app.UseMvc();
                if (settings.Value.EnableHelloSingleJob)
                {
                    app.UseQuartzJob<HelloJobSingle>(TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever()))
                    .UseQuartzJob<InjectSampleJobSingle>(() =>
                    {
                        return TriggerBuilder.Create()
                           .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever());
                    });
                }
                if (settings.Value.EnableHelloJob)
                {
                    app.UseQuartzJob<HelloJob>(new List<TriggerBuilder>
                    {
                        TriggerBuilder.Create()
                        .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever()),
                        TriggerBuilder.Create()
                        .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())
                    });
    
                    app.UseQuartzJob<InjectSampleJob>(() =>
                    {
                        var result = new List<TriggerBuilder>();
                        result.Add(TriggerBuilder.Create()
                            .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()));
                        return result;
                    });
                }
            }
    
        }
    }

    扩展方式示例:

    public static class ModBusScheduler
        {
            public static void AddQuartzJobsService(this IServiceCollection services)
            {
                services.AddQuartzHostedService()
                        .AddQuartzJob<Slaver>("HAVC_Elev")
                        .AddQuartzJob<Slaver>("Lighting", "Lighting")
                        .AddQuartzJobDetail(() => JobBuilder.Create<Slaver>().WithIdentity("Meter").Build())
                        .AddQuartzJobDetail(() => JobBuilder.Create<Slaver>().WithIdentity("PowerDis").Build());
            }
    
            public static void UserQuartzJobsService(this IApplicationBuilder app, AppSettings settings)
            {
                app.UseQuartzJob<Slaver>("HAVC_Elev", () =>
                 {
                     return TriggerBuilder.Create()
                               .WithIdentity("HAVC_Elev")
                               .UsingJobData("modbus", settings.AC_ElevatorSlave)
                               .UsingJobData("devicetype", "HAVC_Elev")
                               .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()).StartNow();
                 });
    } 
    

      

    nuget 连接  https://www.nuget.org/packages/QuartzHostedService/

    github地址  https://github.com/mukmyash/QuartzHostedService

  • 相关阅读:
    [JSOI2007][BZOJ1030] 文本生成器|AC自动机|动态规划
    [NOI2014][BZOJ3670] 动物园|KMP
    [HAOI2010][BZOJ2427] 软件安装|tarjan|树型dp
    [JSOI2008][BZOJ1017] 魔兽地图DotR|树型dp
    [JLOI2014][BZOJ3631] 松鼠的新家|树上倍增LCA|差分
    [SDOI2010][BZOJ1975] 魔法猪学院|A*|K短路
    [BZOJ1251] 序列终结者|Splay
    hdu 2141 Can you find it?
    hdu 3152 Obstacle Course
    hdu 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/MysticBoy/p/11003030.html
Copyright © 2020-2023  润新知