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 ...
随机推荐
- 全面了解 Redis 高级特性,实现高性能、高可靠的数据存储和处理
目录 高性能.高可用.高可扩展性的原理 持久化 RDB持久化 AOF持久化 持久化的配置 RDB配置 AOF配置 持久化的恢复 RDB的恢复 AOF的恢复 RDB和AOF的选择 持久化对性能的影响 数 ...
- 剑指 offer 第 25 天
第 25 天 模拟(中等) 剑指 Offer 29. 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6 ...
- Duplicate File Finder Pro - 重复文件查找器,给你的 Mac 清理出大量磁盘空间
重复文件查找器 Duplicate File Finder Pro 是一个实用程序,只需3次点击就能在Mac上找到重复的文件.拖放功能和尽可能多的文件夹,你想,然后按下扫描按钮.在一分钟,应用程序将给 ...
- flask配置config详解
flask系列讲座与2017年12月6日开始,每周一篇.第三篇其中讲述flask的配置方法.使用app.config.from_object()方法,似乎很神奇.如果明白背后逻辑,实际上很自然.涉及代 ...
- 近万字总结:Java8 Stream流式处理指南
总结/朱季谦 在实际项目当中,若能熟练使用Java8 的Stream流特性进行开发,就比较容易写出简洁优雅的代码.目前市面上很多开源框架,如Mybatis- Plus.kafka Streams以及F ...
- Anaconda 安装 PyTorch 和 DGL
安装 PyTorch Anaconda 是 PyTorch 官方推荐的包管理工具,它会帮助安装所有的依赖项.当使用 conda 安装的时候,可能会出现下载过慢的问题,需要更换清华源来代替默认的cond ...
- 2021.05.09【NOIP提高组】模拟赛总结
2021.05.09[NOIP提高组]模拟赛总结 T1 T2
- ArrayList实现原理和自动扩容
ArrayList在Java集合中的位置, ArrayList原理: transient Object[] elementData; ArrayList通过数组来实现. 默认构造方法会构造一个容量为1 ...
- devops|中小公司效率为王,没必要度量
之前写过一篇文章<devops|中小公司不要做研发效能度量>,主要是从基础设施方向考虑,因为很多条件都不具备,贸然高投入去做研发效能度量可能达不到我们的预期效果,给出的建议是先做好当下打好 ...
- 从原理聊JVM(三):详解现代垃圾回收器Shenandoah和ZGC
作者:京东科技 康志兴 Shenandoah Shenandoah一词来自于印第安语,十九世纪四十年代有一首著名的航海歌曲在水手中广为流传,讲述一位年轻富商爱上印第安酋长Shenandoah的女儿的故 ...