开始先建个空的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可以用来区分任务的。