開始先建個空的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。
可以看到是jobWork1和2可以用來區分任務的。
關鍵字: QuartzFactory IJob void