净核心中使用石英 网实践记录
一、介绍
石英。网是一个强大、开源、轻量的作业调度框架,是开放式交响乐的石英原料药的。网移植,用C#改写,可用于程序和ASP。网应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持像克朗一样表达式等等。
通俗说它的功能是:比如说我想每天晚上2点让程序或网站执行某些代码,或者每隔5秒种我想查看是否有新的任务要处理等。
石英。网是根据爪哇的石英用C#改写而来,最新的版本是3.0.6,源码在https://github。com/石英网/石英网(本地下载)。
实践教程
以WebApi项目举例,用对脚手架功能新建WebApi项目。
public void ConfigureServices(IServiceCollection services){ services .AddMvc();服务AddSingletonISchedulerFactory,StdSchedulerFactory();//注册ischidioderfactory的实例。}[路由(' API/[控制器]')]公共类值控制器:控制器{私有只读is diode factory _ scheduler factory;私有ischidodel _ scheduler公共值控制器(isdioderfactory调度程序工厂){这._调度程序工厂=调度程序工厂;} [HttpGet]公共异步TaskString[](Get(){//1),通过调度工厂获得调度器调度程序=等待调度程序工厂.GetScheduler();//2、开启调度器等待调度程序start();//3、创建一个触发器var触发器=TriggerBuilder .创建()。带有简单的时间表(x=x,在第二毫秒(2)内)。RepeatForever())//每两秒执行一次build();//4、创建任务var jobDetail=JobBuilder .CreateMyJob().WithIdentity("作业"、"组")。build();//5、将触发器和任务器绑定到调度器中等待调度程序调度作业(作业详细信息,触发器);返回等待任务FromResult(新字符串[] { 'value1 ',' value 2 ' });} }公共类MyJob : IJob//创建工作的实现类,并实现对不起方法{公共任务执行(IJobExecutionContext上下文){返回任务。运行(()={使用(流写入器SW=新的流写入器(@ ' c : \用户\管理员\桌面\错误。日志,没错,编码UTF8)) { sw .写线(日期时间现在。ToString(' yyyy-MM-DD HH-MM-ss ');} });} }输出的结果:
2018-08-03 00-03-192018-08-03 00-03-202018-08-03 00-03-222018-08-03 00-03-242018-08-03 00-03-26
上面这种执行的职位没有参数,当需要参数可以通过下面两种方法传递参数:
1、在引发中添加参数值
var trigger3=TriggerBuilder .创建()。带有简单的时间表(x=x,在第二毫秒(2)内)。RepeatForever())//间隔2秒一直执行。使用作业数据(' key1 ',321) //通过在引发中添加参数值。使用作业数据("键2","123")。with IDentity(“trigger 2”,“group1”).build();2、在职位中添加参数值
IJobDetail作业=JobBuilder .CreateMyJob().使用作业数据(' key1 ',123)//通过职位添加参数值。使用作业数据("键2","123")。WithIdentity('job1 ',' group1 ').build();通过下面方法在职位中获取参数值
公共类MyJob : IJob {公共任务执行(IJobExecutionContext)上下文){ var jobData=context .JobDetail。JobDataMap//获取职位中的参数var triggerData=context .触发。JobDataMap//获取引发中的参数定义变量数据=上下文MergedJobDataMap//获取职位和引发中合并的参数定义变量值1=工作数据.GetInt('键1 ');定义变量值2=工作数据.getString(' key 2 ');var dateString=DateTime .现在。ToString(' yyyy-MM-DD HH-MM-ss ');返回任务。运行(()={使用(流写入器SW=新的流写入器(@ ' c : \用户\管理员\桌面\错误。日志,没错,编码UTF8)) { sw .写行(DateString);} });} }当职位中的参数和引发中的参数名称一样时,用语境合并对象数据映射获取参数时触发器中的值会覆盖职位中的值。
3、上面那种情况只能适应那种,参数值不变的情况。
如果发生这种情况,这次的参数值就是上次执行后计算的值,所以不能使用上面的方法。如果每两秒钟实现一次累加运算,现在初始值为0。如果根据上述方法获取值的操作总是0 1,则返回值总是1。为了满足这种情况,只需要添加一个属性[PersistJobDataAfterExecution]。
[persistjobdataafterexecution]//更新JobDetail的JobDataMap的存储副本。这样,下次将执行任务来接收更新的值,而不是原来存储的值公共类myjob : I job { public task execution context context){ var job data=context . job detail . jobdata map;var triggerData=context。Trigger . JobDataMapvar数据=上下文。MergedJobDataMapvar值1=jobData。GetInt(' key 1 ');var值2=jobData。getStrIng(' key 2 ');var值3=数据。getStrIng(' key 2 ');var dateString=DateTime。现在. ToString(' yyyy-MM-DD HH-MM-ss ');Random Random=new Random();jobData['key1']=随机。下一个(1,20);//这里给key赋值,获取的值将是下次进来执行时的更新值,而不是原来的值jobData[' key 2 ']=dateString;返回任务。运行(()={使用(stream writer SW=new stream writer(@ ' c : \用户\管理员\桌面\错误.日志',true,编码。UTF8)) { sw。write line($ ' { DateString } value 1: { value 1 } value 2: { value 2 } ');}//上下文。调度程序。删除作业(上下文。JobDetail . Key);//上下文。计划程序。关闭();});}}三。石英的成分。网
石英主要由三部分组成:工作、触发和调度。
3.1任务
作业是一个已执行的作业,作业需要继承作业接口并实现执行方法。作业中执行的参数是从执行方法的参数中获得的。
3.2触发
常用的触发器有两种:SimpleTrigger触发器和CronTrigger触发器。
SimpleTrigger:可以实现简单的服务,比如每隔几分钟几小时触发一次执行,限制执行次数。
Vartrigger=triggerbuilder。创建()。withsimplemodule (x=x,在tervalinsseconds(2)内)。with repeat count(5))//每2秒执行6次。使用jobdata ('key1 ',321)。带标识('触发器','组').CronTrigger:Cron表达式包含7个字段,秒、分、日、月、周、日和年(可选)。
示例:
var trigger=TriggerBuilder。创建()。带时间表(' 0 0 0 1 1 '))//触发器。使用jobdata ('key1 ',321)。使用jobdata ('key2 ',' trigger-key2 ')。带有标识(' trigger4 ',' group14 ')。每年1月1日0: 00建立();'0 15 10 * * ?*”每天早上10:15触发
'0 0-5 14 * * ?'每天下午2点到2:05点每1分钟触发一次
3.3调度程序
Scheduler是将任务绑定到触发器,这样当触发器被触发时,任务就可以被执行。
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。
版权声明:净核心中使用石英 网实践记录是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。