.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可以用來區分任務的。


分享到:


相關文章: