.net core中使用Quartz.net实现定时任务功能

开始先建个空的web项目。

创建一个新类 QuartzFactory 狠狠的复制就完事了。

<code>  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)
        {
        }
    }/<code>

QuartzJob

<code>public class QuartzJob : IJob
    {
        Logger logger = LogManager.GetCurrentClassLogger();
        public async Task Execute(IJobExecutionContext context)
        {
            var jobKey = context.JobDetail.Key;//获取job信息
            var triggerKey = context.Trigger.Key;//获取trigger信息   --jobWork1  --jobWork2

            logger.Info($"{DateTime.Now} QuartzJob:==>>自动执行\r\n.{jobKey.Name}|{triggerKey.Name}\r\n");
            await Task.CompletedTask;
        }
    }/<code>

QuartzService

View Code

上面代码中的一段代码解读

<code>var trigger2 = TriggerBuilder.Create()

    .WithIdentity("jobWork2")

    .StartNow()

    .WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(11)).RepeatForever())

    .ForJob(job)

    .Build();/<code>

WithIdentity()括号里面的字符串到时候会传到QuartzJob类,我是主要是用这个字符串来判断你所定时执行的某个作业某个任务。

WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(11)).RepeatForever())

这里面的 TimeSpan.FromSeconds(11) 是你定时的时间。

也可以定时每天的几点。
CronScheduleBuilder.DailyAtHourAndMinute(16, 10)

这就是定时每天的16点10分执行当然你复制完这些类没用的。因为是core项目 还是要注册任务的。


Startup类

<code>public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();   //注册mvc服务  
            services.AddQuartz(typeof(QuartzJob));
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            //使用NLog作为日志记录工具
            loggerFactory.AddNLog();
            //引入Nlog配置文件
            env.ConfigureNLog("Nlog.config");

            QuartzService.StartJobs();  //多任务

            //QuartzService.StartJob();  //单任务

            app.UseMvc(routes => {     //开启mvc
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}"
                    );
            });
        }/<code> 

这样就可以运行了。

因为我写的是demo 用的是日志Nlog。

.net core中使用Quartz.net实现定时任务功能

可以看到是jobWork1和2可以用来区分任务的。


分享到:


相關文章: