经常在项目中遇到定时任务的时候,通常第一个想到的是Timer定时器,但是这玩意功能太弱鸡,实际上通常采用的是专业化的第三方调度框架,比如说

Quartz,它具有功能强大和应用的灵活性,我想使用过的人都非常了解,那么本篇就来说说如何通过代码和配置文件来进行job和trigger的配置。

一:常规的job,trigger配置方式

这种常规的方式也是我们初步学习Quartz最先了解到的,即通过JobBuilder和TriggerBuilder来链式一个IJobDetail和ISimpleTrigger,比如下面的代码。

  class Program
{
static void Main(string[] args)
{
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler.Start(); var job = JobBuilder.Create<HelloJob>().Build(); var trigger = TriggerBuilder.Create().WithSimpleSchedule(m => m.WithIntervalInSeconds()
.RepeatForever())
.StartNow()
.Build(); scheduler.ScheduleJob(job, trigger); Console.Read();
}
}

上面这段代码可以看出,在BuildJob的时候,使用提供的HelloJob作为当前的定时调度的任务,下面的ISimpleTrigger的意思就是每一秒钟执行一次HelloJob,

仅此而已,然后就是HelloJob的具体定义,非常简单,实现一个IJob接口。

     public class HelloJob : IJob
{
private string name = string.Empty;
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("当前时间: {0} ", DateTime.Now);
}
}

然后可以把程序跑起来,看看最后的一个结果,可以看到每秒钟都有一个数据输出:

这种方式貌似很完美,但是也有一个不利点,现在需求有变更,我需要将WithIntervalInSeconds(1) 改成WithIntervalInSeconds(2),也就是每秒执行

一次改成每两秒执行一次,这个就头疼了,你不得不面对改一次需求,就需要编译一次再发布,这样的伤筋动骨,我想你也不大愿意吧?面对这种需求肯定是

有办法的,不信的话,你可以往下看。

二:在quartz_jobs.xml定义job和trigger

上面这种硬编码带来的坏处我也跟大家讲到了,接下来看看如何使用xml配置job和trigger,当我们从nuget中获取quartz框架的时候,应该都会发现你的

解决方案中多了一个xsd文件,但是可能有很多人并不知道这个xsd文件到底是用来干嘛的。。。。其实就是用来写xml时做代码提示用的,好了,下面我就一

步步的展示给大家。

1. 从nuget下载文件,没什么好说的,在“引用”上右击鼠标,选择“管理NuGet程序包”看下图:

然后你会看到多了一个job_scheduling_data_2_0.xsd文件。

2.  接下来新建一个quartz_jobs.xml文件,然后选中visual studio中的xml菜单栏,选中“架构”菜单项。

3. 在弹出的对话框中,选择“添加”按钮,找到从nuget中生成的job_scheduling_data_2_0.xsd,然后点击完成。

4. 然后就可以在xml中自由的编码,你会发现关于job和trigger的代码有提示了。。。这极大的提高了我们的开发

效率,对吧。

好了,下面贴出完整的xml案例,从xml中大概也能看得出来,在schedule中定义了一个job和trigger,在job-type节点中定义了需要执行job的命名空间和类名,

有点意思吧,也是最终schedule需要调度的任务。

<?xml version="1.0" encoding="utf-8" ?>
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData">
<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
</processing-directives> <schedule>
<job>
<name>sampleJob</name>
<group>sampleGroup</group>
<description>Sample job for Quartz Server</description>
<job-type>ConsoleApplication5.HelloJob,ConsoleApplication5</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<simple>
<name>sampleSimpleTrigger</name>
<group>sampleSimpleGroup</group>
<description>Simple trigger to simply fire sample job</description>
<job-name>sampleJob</job-name>
<job-group>sampleGroup</job-group>
<misfire-instruction>SmartPolicy</misfire-instruction>
<repeat-count>-1</repeat-count>
<repeat-interval>1000</repeat-interval>
</simple>
</trigger>
</schedule>
</job-scheduling-data>

5. job的配置文件基本上算是搞定了,然后配置Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin类来处理

这个xml文件,同时指定下quartz_jobs.xml的路径,如下所示:

     class Program
{
static void Main(string[] args)
{
var factory = new StdSchedulerFactory(new System.Collections.Specialized.NameValueCollection()
{
{"quartz.plugin.xml.fileNames","~/quartz_jobs.xml" },
{"quartz.plugin.xml.type","Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin,Quartz"}
}); IScheduler scheduler = factory.GetScheduler(); scheduler.Start();
}
}

好了,基本上就这样配置结束了,最后一点要注意的就是配置一下quartz_jobs.xml始终复制到bin文件下,如图:

最后跑一下源代码看看,效果咋样,看到没有,是不是很牛逼。

好了,现在是不是发现你的灵活性有很大提高了,如果将1s改成2s,我只需要把quartz_jobs.xml中的<repeat-interval>1000</repeat-interval>,改成

<repeat-interval>2000</repeat-interval>就可是做到对trigger的动态配置,是不是很酷。

最后附完整案例:ConsoleApplication5.zip

采用config方式灵活配置我们的Quarz.net中的Job,Trigger的更多相关文章

  1. ASP.NET 多环境下配置文件web.config的灵活配置

    调试,发布Asp.net程序的时候,开发环境和发布环境的Web.Config往往不同,比如connectionstring等.如果常常有调试,发布的需求,就需要常常修改web.config文件,这往往 ...

  2. ASP.NET 多环境下配置文件web.config的灵活配置---转

    注意:本功能在.Net Core中已经不可用,暂时需手动修改web.config中的信息,或者将其设置在appsettings.XXX.json中,然后再使用web.config中的环境变量来制定使用 ...

  3. Spring MVC 的 Java Config ( 非 XML ) 配置方式

    索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml web/pom.xml web.xml WebInitializer.java ...

  4. Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限

    目录 1. 需要在spring-security.xml中配置验证过滤器,来取代spring-security.xml的默认过滤器 2. 配置securityMetadataSource,可以通过ur ...

  5. Spring(二十):Spring AOP(四):基于配置文件的方式来配置 AOP

    基于配置文件的方式来配置 AOP 前边三个章节<Spring(十七):Spring AOP(一):简介>.<Spring(十八):Spring AOP(二):通知(前置.后置.返回. ...

  6. 采用注解方式实现security

    采用注解方式使用security,首先我们需要用注解方式实现Spring MVC,新建一个Maven项目 本项目目录结构如下:  我们会发现在WEB-INF中没有web.xml文件,下面会介绍,采用j ...

  7. 【Spring Cloud】Spring Cloud Config 实现分布式配置中心

    Spring Cloud Config 实现分布式配置中心 一.分布式配置中心 分布式系统中,往往拥有大量的服务应用,而每个应用程序都需要有对应的配置文件来协助完成服务环境初始化.运行.因此生产了大量 ...

  8. vue.config.js基础配置

    const path = require('path') const UglifyPlugin = require('uglifyjs-webpack-plugin') module.exports ...

  9. SpringCloud微服务实战——搭建企业级开发框架(三十六):使用Spring Cloud Stream实现可灵活配置消息中间件的功能

      在以往消息队列的使用中,我们通常使用集成消息中间件开源包来实现对应功能,而消息中间件的实现又有多种,比如目前比较主流的ActiveMQ.RocketMQ.RabbitMQ.Kafka,Stream ...

随机推荐

  1. ZOJ4043 : Virtual Singers

    将所有$A$和$B$混在一起排序,那么每个$B$要匹配一个$A$,从左往右依次考虑每个数: 如果是一个$B$: 如果左边没有多余的$A$,那么将其放入堆$q_C$中,表示这个$B$还未匹配. 否则选择 ...

  2. Xmanager6 下载地址

    Xmanager-6标准版下载地址 http://xiazai.xshellcn.com/trial/Xmanager-6.0.0080_yy.exe Xmanager-6企业版下载地址 http:/ ...

  3. python d:\test.py File "<stdin>", line 1 python d:\test.py ^ SyntaxError: invalid syntax

    pyhton出错: python d:\test.py File "<stdin>", line 1 python d:\test.py ^SyntaxError: i ...

  4. 201771010118 马昕璐《面向对象程序设计java》第十二周学习总结

    第一部分:理论知识学习部分 用户界面:用户与计算机系统(各种程序)交互的接口 图形用户界面:以图形方式呈现的用户界面 AET:Java 的抽象窗口工具箱包含在java.awt包中,它提供了许多用来设计 ...

  5. [AtCoder3856]Ice Rink Game - 模拟

    Problem Statement An adult game master and N children are playing a game on an ice rink. The game co ...

  6. TP框架下载功能

    namespace Home\Controller; use Think\Controller; use Org\Net\Http; class IndexController extends Con ...

  7. django介绍及路由系统

    第一:Python的web框架介绍 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引 ...

  8. 你不知道的JS之作用域和闭包 附录

     原文:你不知道的js系列 A 动态作用域 动态作用域 是和 JavaScript中的词法作用域 对立的概念. 动态作用域和 JavaScript 中的另外一个机制 (this)很相似. 词法作用域是 ...

  9. 微信小程序 open-data更改样式 open-data 显示头像 圆形

    废话不多说,直接看效果: 效果一: 代码如下: <view class='zhubo'> <view class='zhuboLeft'> <view class='zh ...

  10. 【安富莱专题教程第3期】开发板搭建Web服务器,利用花生壳让电脑和手机可以外网远程监控

    说明:1.  开发板Web服务器的设计可以看我们之前发布的史诗级网络教程:链接.2.  需要复杂些的Web设计模板,可以使用我们V6开发板发布的综合Demo:链接.3.  教程中使用的是花生壳免费版, ...