栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Quartz.net在.Net Core中使用

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Quartz.net在.Net Core中使用

近来使用Quartz.net来实现定时作业调度,现记录一下使用流程。

关于Quartz的介绍和详细说明,请访问官网https://www.quartz-scheduler.net/

一、Quartz.net中主要有以下几个对象

1.StdSchedulerFactory(调度器工厂)用于创建调度

2.IScheduler (调度器)用于绑定任务和触发器进行工作

3.IJobDetail(任务)用于执行业务工作

4.ITrigger(触发器)用于指定在特定条件下执行任务

二、安装Quartz.AspNetCore包

三、Quartz.net实现作业调度有两种方式,配置文档方式和不用配置文档方式,以下将分别演示。

1.不用配置文档方式:

如果你的作业项目比较简单,一般只有一个任务或者一两个触发器,且以后不会改变触发策略或者添加任务,那么只需要几行代码来使用Quartz就好了。

        public static void Main(string[] args)
        {
            //任务,JobBLL即你的任务类
            IJobDetail jobDetail = JobBuilder.Create().WithIdentity("MyJob").Build();
            //cron时间策略
            ITrigger trigger = TriggerBuilder.Create().WithIdentity("Mytrigger").WithCronSchedule(CommonBLL.Config["system:cron"]).Build();
            //执行一次策略
            ITrigger nowTrigger = TriggerBuilder.Create().WithIdentity("now").StartNow().Build();
            //简单策略,每3秒执行一次,一共执行两次
            //ITrigger trigger = TriggerBuilder.Create().WithSimpleSchedule(s => s.WithIntervalInSeconds(3).WithRepeatCount(2)).Build();
            //启动调度
            StdSchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler = await factory.GetScheduler();
            //await scheduler.ScheduleJob(jobDetail, trigger);
            //绑定job和trigger,将任务与触发器添加到调度器中
            await scheduler.ScheduleJob(jobDetail, new List() { trigger, nowTrigger }, replace: true);//多个trigger,立即执行&&按照既定cron时间策略
            //scheduler.ListenerManager.AddJobListener(new TestJobListener());//添加任务执行监控
            await scheduler.Start();//开启调度
        }
 [DisallowConcurrentExecution]//禁止同时执行任务
    public class MyJob:IJob
    {
        //实现Execute方法
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Run(() =>
            {
                Console.WriteLine("begin....");
                //你的作业部分
                Thread.Sleep(3000);
                Console.WriteLine("end...");
            });
        }
    }

其中,IJob的实现比较简单,将业务代码放在Job中的Execute方法中。

Trigger分为简单触发器和Cron方式,简单触发器一般指立即执行,或者每隔指定时间来执行这样的;Cron方式指可以使用Cron表达式来规定触发时间;Cron表达式的构建可以在网上找工具来构造:https://cron.qqe2.com/

2.配置文档方式

配置文档方式就是通过在配置文件中配置trigger和绑定策略方式,这样可以实现灵活配置;

(1)新增配置文件quartz.config

# You can configure your scheduler in either  configuration section
# or in quartz properties file
# Configuration section has precedence

quartz.scheduler.instanceName = QuartzTest

# configure thread pool info
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
quartz.threadPool.threadCount = 10
quartz.threadPool.threadPriority = Normal

# job initialization plugin handles our xml reading, without it defaults are used
# quartz.plugin.triggHistory.type = Quartz.Plugin.History.LoggingJobHistoryPlugin
quartz.plugin.jobInitializer.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins
#配置文档路径
quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml

# export this server to remoting context
#quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
#quartz.scheduler.exporter.port = 555
#quartz.scheduler.exporter.bindName = QuartzScheduler
#quartz.scheduler.exporter.channelType = tcp
#quartz.scheduler.exporter.channelName = httpQuartz

其中主要是quartz.plugin.jobInitializer.fileNames这个属性是接下来的配置文件的路径,此外将该配置文件复制到输出目录设置为“始终复制”或者“较新赋值”,这样才可以生成到debug或release中。

(2)添加配置文件quartz_jobs.xml



	
		true
	

	
		
			MyJob
			MyJob测试任务
			
			QuartzConsole.MyJob, QuartzConsole
		
		
			HisJob
			HisJob测试任务
			QuartzConsole.HisJob, QuartzConsole
		
		
			
				simpleTrigger
				TestTrigger测试触发器
				MyJob
				
				-1
				
				3000
			
		
		
			
				cronTrigger
				TestTrigger1测试触发器
				MyJob
				
				0/2 * * * * ?
			
		
		
			
				cronTrigger1
				TestTrigger1测试触发器
				HisJob
				0/1 * * * * ?
			
		
	

按照这样的配置节进行配置,其中中为任务属性,trigger为触发器属性,具体的含义已在注释,当然还有很多配置变量,比如job-group或者trigger-group,还没用得到,所以不做使用;

(3)开启调度即可

     static void Main(string[] args)
        {
            //调度
            StdSchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler = await factory.GetScheduler();
            await scheduler.Start();//开启调度
        }

这样在调度开启时候,调度自己去配置文件中检测任务及触发器;后续如果添加修改job或者trigger时候,就可以在配置文件中进行操作即可。

完,更多功能等用到再叙

 

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954573.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号