例如需要在某年某月去将数据库的某个数据更新或者同步,又或者是每隔一段时间来执行一部分代码去调用接口,但是又不想人为的手动去执行
针对此类业务可以使用”定时调用任务”,市面上有很多的定时调度任务框架,甚至你可以使用定时器来结合windows服务做一个简易版的任务调度程序,此处我们学习quartz,因为quartz是一个强大、开源、轻量级的任务调度框架,支持cron-like表达式其他一些优秀的特性。
1.基本概念
2.初步使用
1.nuget引入quartz程序集
2.创建一个scheduler任务调度容器
3.指定具体执行的任务job和触发器
4.把策略和任务放入到scheduler并启动
public class quartzmanager{ public async static void init() { stdschedulerfactory factory = new stdschedulerfactory(); //创建一个scheduler任务调度容器 ischeduler scheduler = await factory.getscheduler(); //指定具体执行的任务job ijobdetail ndemailjob = jobbuilder.create<ndmailjob>() .withidentity("ndemailjob", "ndemailjobgrop") .withdescription("定时发送邮件").build(); //设置触发条件为五秒执行一次 itrigger ndemailtrigger = triggerbuilder.create() .withidentity("ndemailtrigger", "ndemailjobgrop" .withdescription("quartz") .withcronschedule("3/5 * * * * ?") .build(); //把策略和任务放入到scheduler await scheduler.schedulejob(ndemailjob, ndemailtrigger); //执行任务 await scheduler.start(); } }//增加特性保证任务不会重叠执行[disallowconcurrentexecution]public class ndmailjob : ijob{ //job类 public async task execute(ijobexecutioncontext context) { await task.run(() => { //dosomthing console.writeline($"开始发送邮件{datetime.now}张作霖手黑"); }); }}
有时候我们想在job执行时需要一些参数,并根据这些参数来做一些逻辑处理,这时候就需要使用quartz传参了。
在quartz中传参主要有一些几种方式
1.job传参
2.trigger传参
1.job传参和trigger传参
使用jobdatamap.add添加参数,在job内部使用上下文的jobdatamap.getstring获取
ijobdetail ndemailjob = jobbuilder.create<ndmailjob>().build(); //往job传一个参数ndemailjob.jobdatamap.add("params","job测试传参");itrigger trigger = triggerbuilder.create().build();//往trigger传一个参数trigger.jobdatamap.add("params", "trigger测试传参");//在job中获取参数public async task execute(ijobexecutioncontext context){ await task.run(() => { //获取job传参 string paramjob = context.jobdetail.jobdatamap.getstring("params"); //获取trigger传参 string paramtrigger = context.trigger.jobdatamap.getstring("params"); //dosomthing console.writeline($"开始发送邮件{datetime.now}"); });}
监听器是为调度程序中发生的事件执行操作而创建的对象,主要有一下三种监听器
1.调度监听器ischedulerlistener主要用于调度过程的监听。
2.触发器监听器itriggerlistener主要用于接收和触发器相关的事件监听。
3.作业监听器ijoblistener用于接收job运行生命周期相关事件监听。
1.实现监听器
以作业监听器为例,因为触发和调度监听一样的实现。
1.自定义作业监听器需要继承自ijoblistener接口并实现方法.
2.在调度器的监听管理中添加自定义监听器.
//实现监听器public class customjoblistener : ijoblistener{ public string name => "customjobli内向孩子的潜在优势stener"; }//添加到监听管理中scheduler.listenermanager.addjoblistener(new customjoblistener());
用于可视化工具来查看当前运行job的信息。
1.需要新建一个web项目或者控制台项目。
2.在web项目中 nuget 引入quartz 和crystalquartz.remote程序包
3.在job调度中配置stdschedulerfactory相关信息指定监听端口
var properties = new namevaluecollection(); properties["quartz.scheduler.instancename"] = "test monitor system"; // 设置线程池 properties["quartz.threadpool.type"] = "quartz.simpl.助学金发放时间simplethreadpool, quartz"; properties["quartz.threadpool.threadcount"] = "5"; properties["quartz.threadpool.threadpriority"] = "normal";// 远程输出配置properties["quartz.scheduler.exporter.type"] = "quartz.simpl.remotingschedulerexporter, quartz";properties["quartz.scheduler.exporter.port"] = "8081";properties["quartz.scheduler.exporter.bindname"] = "quartzscheduler";properties["quartz.scheduler.exporter.channeltype"] = "tcp";var schedulerfactory = new stdschedulerfactory(properties);ischeduler _scheduler = await schedulerfactory.getscheduler();
4.web监控端去访问统一的端口号下的crystalquartzpanel.计算机证书怎么考axd即可查看。
我们除了在代码中定义任务的各种调度和触发器之外,还可以使用xml配置文件的方式来创建job任务
1.准备配置文件,配置job+trigger相关信息,一定要将此文件属性设为”始终复制”
<?xml version="1.0" encoding="utf-8"?><job-scheduling-data xmlns="http://quartznet.sourceforge.net/jobschedulingdata" xmlns:xsi="/d/file/titlepic/xmlschema-instance" version="2.0"> <processing-directives> <overwrite-existing-data>true</overwrite-existing-data> </processing-directives> <schedule> <job> <name>ndemailjob</name> <group>test mail job</group> <description>this is test mail job</description> <!--此处为job所在的类,及程序集--> <job-type>dispatcherproject.job.ndmailjob,dispatcherproject</job-type> <durable>true</durable> <recover>fal</recover> </job> <trigger> <cron> <name>ndemailtrigger</name> <group>ndemailjobgrop</group> <job-name>ndemailjob</job-name> <job-group>test mail job</job-group> <cron-expression>5/3 * * * * ?</cron-expression> </cron> </trigger> </schedule></job-scheduling-data>
2.读取配置文件,获取信息,生成对应的job和trigger
xmlschedulingdataprocessor processor = new xmlschedulingdataprocessor(new simpletypeloadhelper());//读取配置文件await processor.processfileandschedulejobs("~/config/quartz.xml", scheduler);//启动调度任务await scheduler.start();
到此这篇关于quartz在.net中的使用的文章就介绍到这了,更多相关quartz .net使用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 02:13:28,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/9d7bb69789bd530fa953839b12948d1c.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Quartz在.NET中的使用教程.doc
本文 PDF 下载地址:Quartz在.NET中的使用教程.pdf
留言与评论(共有 0 条评论) |