最近在做一个定时任务,要求是每一分钟触发一次。

由于之前是采用的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表达式的方法的更多相关文章

  1. Spring之Quartz定时任务和Cron表达式详解

    1.定时业务逻辑类 public class ExpireJobTask { /** Logger */ private static final Logger logger = LoggerFact ...

  2. Quartz.net 定时任务之Cron表达式

    一.cron表达式简单介绍和下载 1.在上一篇博客"Quartz.net 定时任务之简单任务"中,我简单介绍了quartz的使用,而这篇博客我将介绍cron的具体使用(不足之处望大 ...

  3. 摆脱定时任务的cron表达式的困扰

    一.背景 最近因为需要,需要适用Spring的task定时任务进行跑定时任务,以前也接触过,但是因为懒没有好好地理解@Scheduled的cron表达式,这次便对它做了一个全方位的了解和任务,记录下来 ...

  4. @Scheduled执行定时任务与cron表达式

    1 配置文件形式执行定时任务 1 1.X 版本与spring结合使用实例 1.1 常用maven管理 pom.xml文件 <project xmlns="http://maven.ap ...

  5. Quartz.net的cron表达式

    写在前面 前面有一篇文章用到了quartz.net,在设置定时时间的时候,使用了cron表达式,这里记录几种常见设置方式,方便对照使用. 详情 在这篇文章:Quartz.Net在windows服务中的 ...

  6. Quartz中Cron表达式使用方法

    Quartz中CronTrigger支持日历相关的反复时间间隔(比方每月第一个周一运行),而不是简单的周期时间间隔. 它的调度规则基于 Cron 表达式. 以下就来说一下Cron表达式的规则及使用方法 ...

  7. spring 定时任务 scheduled Cron表达式

    转载:https://blog.csdn.net/u011789653/article/details/51153536 可以借鉴:https://www.cnblogs.com/softidea/p ...

  8. 【Quartz.net】- Cron表达式

    一.结构 corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份 二.各字段的含义   字段 允许值 允许的特殊字符 秒(Seconds) 0~59的整数 , - * / ...

  9. [java,2018-02-01] quartz定时任务中时间表达式

    格式: [秒] [分] [小时] [日] [月] [周] [年] 序号  说明   是否必填     允许填写的值                  允许的通配符 1       秒        是 ...

  10. 作业调度框架 Quartz 学习笔记(三) -- Cron表达式 (转载)

    前面两篇说的是简单的触发器(SimpleTrigger) , SimpleTrigger 只能处理简单的事件出发,如果想灵活的进行任务的触发,就要请出 CronTrigger 这个重要人物了. Cro ...

随机推荐

  1. PHP的序列化和反序列化

    PHP序列化 什么是PHP序列化 serialize() //将一个对象转换成一个字符串 unserialize() //将字符串还原成一个对象 通过序列化与反序列化我们可以很方便的在PHP中进行对象 ...

  2. vue对象深拷贝(避免对象赋值,改变一个对象的值,另一个对象也变化)

    对象直接赋值时,例如 let b = { name: 'name', age: 12} let a=b, a.age = 13 console.log(b.age)  // 13 由此可见,当改变 a ...

  3. python入门教程之十五获取对象属性的几种方法

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> ...

  4. Python爬取pexels图片

    研究Python爬虫,网上很多爬取pexels图片的案例,我下载下来运行没有成功,总量有各种各样的问题. 作为菜鸟初学者,网上的各个案例代码对我还是有不少启发作用,我用搜索引擎+chatGPT逐步对代 ...

  5. TS(一)环境搭建与基本类型

    1 TypeScript 环境搭建 1 准备NodeJs环境 2 npm全局安装typeScript npm i -g typescript 3 编写一个ts文件 4 使用tsc命令编译ts文件为js ...

  6. Spring Boot 中使用 Redis

    Redis 环境 redis 安装.配置,启动:(此处以云服务器上进行说明) 下载地址:https://redis.io/download/ 下载后上传到云服务器上,如 /usr/local 中 gc ...

  7. ARM Cortex-M4|非常好用的一种串口收发方式

    在这里分享项目中我经常使用的一种串口收发方式:阻塞发送 + 接收中断 +空闲中断 + 环形队列 项目代码地址:www.baidu.com 一.简介 串口发送使用最简单的阻塞发送方式,一般来说都是接收的 ...

  8. DFS手写排列

    DFS手写排列 虽然python中有自带的排列函数,但是在某些特殊情况需要手写排列.掌握了DFS手写排列对DFS的理解有一定的帮助. 1.手写排列(非字典序输出) 这种代码比较简单易懂,但是不是按照字 ...

  9. 密码学与网安——intro

    Terminology primitive: 原语 (一种不可分割的最基础操作,跟具体的视角和情形有关) 两个时间节点 1949年(1945年):Shannon 提出完全安全性,开始现代密码学 197 ...

  10. 一文搞懂JavaScript数组的特性

    前言 数组是几乎所有编程语言的基础语法,JavaScript因为语法特性,之前缺少一些集合类对象,对数组的使用就会更多一些,因此我们更需要理解数组知识. 然而大部分人对数组都已经非常熟悉了,所以本文将 ...