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

由于之前是采用的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. CoordConv:给你的卷积加上坐标

    摘要:本文主要对CoordConv的理论进行了介绍,对其进行了复现,并展示了其在网络结构中的用法. 本文分享自华为云社区<CoordConv:给你的卷积加上坐标>,作者: 李长安. 一.理 ...

  2. 部署kubernetes官网博客

    部署kubernetes官网博客 访问 https://kubernetes.io/ 有些时候不问题,部署离线内网使用官网以及博客, 各位尝鲜可以访问 https://doc.oiox.cn/ 安装d ...

  3. [Linux]Linux发展历程

    古人云,知其然知其所以然.马哲思想指导着我们,任何事物.问题,离不开:为什么(Why,事物从哪里来?).是什么(What,事物的定位?).怎么做(How,到哪里去?)的哲学3问. 继上个月算是相对彻底 ...

  4. [网络]HTTPS下服务器与浏览器的通信:HTTPS背后的加密算法 | TLS := SSL [转载]

    全文转载自: HTTPS背后的加密算法 - 博客园 1 概述: 基本原理/过程 当你在浏览器的地址栏上输入https开头的网址后,浏览器和服务器之间会在接下来的几百毫秒内进行大量的通信.InfoQ的这 ...

  5. 五月九号java基础知识点

    1.哈希集合元素不按顺序排序,若要排序使用LinkedHashSet类2.树集合类不仅实现Set接口,还实现java.lang.SortedSet接口来实现排序操作3.TreeSet<Strin ...

  6. Hooks与事件绑定

    Hooks与事件绑定 在React中,我们经常需要为组件添加事件处理函数,例如处理表单提交.处理点击事件等.通常情况下,我们需要在类组件中使用this关键字来绑定事件处理函数的上下文,以便在函数中使用 ...

  7. 界面重建——Marching cubes算法

    一.引子 对于一个标量场数据,我们可以描绘轮廓(Contouring),包括2D和3D.2D的情况称为轮廓线(contour lines),3D的情况称为表面(surface).他们都是等值线或等值面 ...

  8. 15-js语法检查eslint

    const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); modul ...

  9. 飞腾CPU FT-2000/4 uboot下PHY调试记录

    飞腾爱好者技术交流群码公众号"乌拉大喵喵" 一.环境说明 板子是FT-2000/4的开发板: 固件版本: ft-2004c_u-boot-v2-Ver0.3_20211223100 ...

  10. Apache hudi 核心功能点分析

    Hudi 文中部分代码对应 0.14.0 版本 发展背景 初始的需求是Uber公司会有很多记录级别的更新场景,Hudi 在Uber 内部主要的一个场景,就是乘客打车下单和司机接单的匹配,乘客和司机分别 ...