C#调用Quartz 定时任务。使用Cron表达式的方法
最近在做一个定时任务,要求是每一分钟触发一次。
由于之前是采用的FluentScheduler写的,现在改成了Cron表达式。中间出现了一些问题,所以现在写下来,和大家分享一下。
先说一下准备工作,你需要这么三个dll:

将他们添加到指定的位置就可以了。
定时任务,我们要做的就是在一开始运行项目的时候让他启动,所以在Global.asax里面的这个方法里面增加圈出的这个方法,指向你另一个类中的方法。

我是指向了这么一个类PlanRegistry,这里面的这个Start方法:
public static void Start()
{
string QuestionCron = ConfigurationManager.AppSettings["quarterCon"] == null ? "0 0/1 * * * ? *" : ConfigurationManager.AppSettings["quarterCon"];
////新建一个调度器工工厂
ISchedulerFactory factory = new StdSchedulerFactory();
////使用工厂生成一个调度器
IScheduler scheduler = factory.GetScheduler();
//启动调度器
scheduler.Start();
IJobDetail job = JobBuilder.Create<CreateCheckTaskJob>().Build();
// 新建一个触发器
ITrigger trigger = TriggerBuilder.Create().StartNow().WithCronSchedule(QuestionCron).Build();
//将任务与触发器关联起来放到调度器中
scheduler.ScheduleJob(job, trigger);
}

这个地方有一个点需要注意,那就是这个quarterCon,我们需要从我们的Web.Config配置文件中读取。
<!--定时器:每一分钟触发一次-->
<add key="quarterCon" value="0 0/1 * * * ? *" />
将这个Cron表达式,加在appSettings里面即可,名字以及执行的方式方法你都可以自定义,另外Cron表达式的写法,网上很多,也有很多的在线生成工具,不在陈述。
任务启动之后,我们会跳转到这么一个类,就是你自己定义的关于你后台逻辑的类了,我们这里的是CreateCheckTaskJob:
这个地方的方法,需要继承一个Ijob的类:

public void Execute(IJobExecutionContext context)
{
}
这是这个方法的空函数,你可以在里面加你自己需要的方法。
到这里,基本上就结束了,总结几个出错的地方:
1.提示Common.Logging的版本问题:
未能加载文件或程序集“Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f
那说明你引入的dll版本异常
你可以尝试看一下,你现在引入的版本是多少,在看一下,你配置文件里面定义的版本是多少,统一起来,我这里是采用的3.3.1.0。
另外你也需要在配置文件中加入以下内容

<dependentAssembly>
<assemblyIdentity name="Common.Logging" publicKeyToken="AF08829B84F0328E" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.3.1.0" newVersion="3.3.1.0"/>
</dependentAssembly>
加入此依赖。

另外就是根据需要在packages.config里面加入上述的包引用。
2.Quartz.Impl.StdSchedulerFactory'的類型初始值設定項引發異常
如果出现此问题,是由於 app.config 或者 web.config 不包含 commonlogging 節,構造函數失敗。你的.config 文件包含以下部分:
<configSections>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
</sectionGroup>
</configSections>
<common>
<logging>
<factoryAdapter type="Common.Logging.Simple.TraceLoggerFactoryAdapter, Common.Logging">
<arg key="level" value="DEBUG"/>
<arg key="showLogName" value="true"/>
<arg key="showDataTime" value="true"/>
<arg key="dateTimeFormat" value="yyyy/MM/dd HH:mm:ss:fff"/>
</factoryAdapter>
</logging>
</common>
另外可能还需要加入Quarz的配置: <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<quartz>
<add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/>
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
<add key="quartz.threadPool.threadCount" value="10"/>
<add key="quartz.threadPool.threadPriority" value="2"/>
<add key="quartz.jobStore.misfireThreshold" value="60000"/>
<add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
</quartz>
这部分都应该放在configSections里面。
最后,附上三个我使用的dll,供大家使用,请注意版本不同会有影响的。
链接:https://pan.baidu.com/s/1TGKF4rMeW-uAi5IIZa3uGg
提取码:5gtn
复制这段内容后打开百度网盘手机App,操作更方便哦
C#调用Quartz 定时任务。使用Cron表达式的方法的更多相关文章
- Spring之Quartz定时任务和Cron表达式详解
1.定时业务逻辑类 public class ExpireJobTask { /** Logger */ private static final Logger logger = LoggerFact ...
- Quartz.net 定时任务之Cron表达式
一.cron表达式简单介绍和下载 1.在上一篇博客"Quartz.net 定时任务之简单任务"中,我简单介绍了quartz的使用,而这篇博客我将介绍cron的具体使用(不足之处望大 ...
- 摆脱定时任务的cron表达式的困扰
一.背景 最近因为需要,需要适用Spring的task定时任务进行跑定时任务,以前也接触过,但是因为懒没有好好地理解@Scheduled的cron表达式,这次便对它做了一个全方位的了解和任务,记录下来 ...
- @Scheduled执行定时任务与cron表达式
1 配置文件形式执行定时任务 1 1.X 版本与spring结合使用实例 1.1 常用maven管理 pom.xml文件 <project xmlns="http://maven.ap ...
- Quartz.net的cron表达式
写在前面 前面有一篇文章用到了quartz.net,在设置定时时间的时候,使用了cron表达式,这里记录几种常见设置方式,方便对照使用. 详情 在这篇文章:Quartz.Net在windows服务中的 ...
- Quartz中Cron表达式使用方法
Quartz中CronTrigger支持日历相关的反复时间间隔(比方每月第一个周一运行),而不是简单的周期时间间隔. 它的调度规则基于 Cron 表达式. 以下就来说一下Cron表达式的规则及使用方法 ...
- spring 定时任务 scheduled Cron表达式
转载:https://blog.csdn.net/u011789653/article/details/51153536 可以借鉴:https://www.cnblogs.com/softidea/p ...
- 【Quartz.net】- Cron表达式
一.结构 corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份 二.各字段的含义 字段 允许值 允许的特殊字符 秒(Seconds) 0~59的整数 , - * / ...
- [java,2018-02-01] quartz定时任务中时间表达式
格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 ...
- 作业调度框架 Quartz 学习笔记(三) -- Cron表达式 (转载)
前面两篇说的是简单的触发器(SimpleTrigger) , SimpleTrigger 只能处理简单的事件出发,如果想灵活的进行任务的触发,就要请出 CronTrigger 这个重要人物了. Cro ...
随机推荐
- Cisco模拟器配置DNS服务器遇到的问题
1.使用工具: Cisco-Packet-Tracer(7.0或8.0版本及以上) 2.问题: 原因:安装思科模拟器后进行中文汉化: 过程:配置DNS服务时无法进行域名操作: 解决: 更改为原来的语言 ...
- java -- Object类和String类
Object类 java.lang.Object类是Java语言中的根类,每个类都使用 Object 作为超类, 所有的类都直接或间接继承自 Object 类.所有对象(包括数组)都实现这个类的方法. ...
- kubernetes核心实战(二)---Pod+ReplicaSet
3.pod Pod 是可以在 Kubernetes 中创建和管理的.最小的可部署的计算单元. Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器:这些容器共享存储.网络.以及怎样运行这些容 ...
- python实现桌面截图功能
PIL中的ImageGrab模块 import time import numpy as np from PIL import ImageGrab img = ImageGrab.grab(bbox= ...
- day134:2RenMJ:TypeScript的抽象类&装饰器&命名空间&模块&编译配置文件&python中的类型注解
目录 1.抽象类 2.装饰器 3.命名空间 4.模块 5.编译配置文件 6.python的类型注解 1.抽象类 抽象类(abstract class)做为其它派生类的基类使用. 它们一般不会直接被实例 ...
- opencv基础
Python 和 OpenCV 的结合是计算机视觉领域中应用最为广泛的一种方式,它们的结合使得开发者可以快速.高效地完成各种视觉任务.本文将介绍 Python 和 OpenCV 的基础使用,包括安装. ...
- 帝国ECMS静态生成为一行代码/静态页面打乱教程
一.内容页变成一行修改1.打开文件e/class/functions.php2.找到以下函数 function GetHtml($classid,$id,$add,$ecms=0,$doall=0) ...
- MDC轻量化日志链路跟踪的若干种应用场景
"If debugging is the process of removing software bugs, then programming must be the process of ...
- 3520. 【NOIP2013模拟11.7B组】原根(math)
题目: 考试想法: 考试的时候觉得这些数学公式太恶心了,所以就直接跳过了. 正解: 直接暴力模拟就可以了. 代码: #include<bits/stdc++.h> using namesp ...
- 笔记六:进程间的通信(IPC通信之消息队列)
IPC通信之消息队列 "消息"是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象 .消息被发送到队列中."消息队列&q ...