首页 > 作文

Quartz在.NET中的使用教程

更新时间:2023-04-04 02:14:11 阅读: 评论:0

目录
一、背景二、quartz三江西信息应用职业技术学院、传递参数四、在scheduler中注册监听器五、可视化管理界面六、配置文件配置任务

一、背景

例如需要在某年某月去将数据库的某个数据更新或者同步,又或者是每隔一段时间来执行一部分代码去调用接口,但是又不想人为的手动去执行

针对此类业务可以使用”定时调用任务”,市面上有很多的定时调度任务框架,甚至你可以使用定时器来结合windows服务做一个简易版的任务调度程序,此处我们学习quartz,因为quartz是一个强大、开源、轻量级的任务调度框架,支持cron-like表达式其他一些优秀的特性。

二、quartz

1.基本概念

schedulertriggerjob调度器,quartz工作时的独立容器触发器,定义了调度任务的时间规则调用任务具体要执行的动作的容器

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}");    });}

四、在scheduler中注册监听器

监听器是为调度程序中发生的事件执行操作而创建的对象,主要有一下三种监听器

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图