一、Quartz.net简介

  Quartz.net是一个开源的任务调度框架,很多定时任务、调度任务都可以用这个框架,如定时日志等。

二、Quartz.net用途

  • 定时给女朋友发送消息
  • 女朋友生日的时候定时提醒
  • 购物定时打折任务

三、Quartz.net实例

  • 安装

    Quartz.net的安装通过 NuGet包管理 安装,打开 NuGet包管理,搜索Quartz.net,点击安装。

也可以在nuget控制台输入:Install-Package Quartz实现安装。

  • 实现

继承IJob接口,实现Execute方法,以下是一个简单的定时写日志的实现

public class WriteLogJob : IJob
{
/// <summary>
/// 实现接口
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public Task Execute(IJobExecutionContext context)
{
Task task = null;
try
{
string fileName = "quartzLog.txt";
using (StreamWriter writer = new StreamWriter(fileName, true))
{
task = writer.WriteAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\r\n");
}
}
catch (Exception)
{ } return task;
}
}
  • 配置和自定义管理IScheduler
 public class QuartzHelper
{
static readonly IScheduler scheduler;
static QuartzHelper()
{
try
{
var properties = new NameValueCollection();
//1.设置线程池
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
//2.设置线程池最大数量
properties["quartz.threadPool.threadCount"] = "";
//3.设置作业中每个线程的优先级
properties["quartz.threadPool.threadPriority"] = System.Threading.ThreadPriority.Normal.ToString();
//4.远程输出配置
properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
properties["quartz.scheduler.exporter.port"] = "";
properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";
properties["quartz.scheduler.exporter.channelType"] = "tcp"; //properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
////设置线程池的最大线程数量
//properties["quartz.threadPool.threadCount"] = "5";
////设置作业中每个线程的优先级
//properties["quartz.threadPool.threadPriority"] = System.Threading.ThreadPriority.Normal.ToString(); //// 远程输出配置
//properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
//properties["quartz.scheduler.exporter.port"] = "555"; //配置端口号
//properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";
//properties["quartz.scheduler.exporter.channelType"] = "tcp"; //协议类型 //5.创建一个工程
var schedulerFactory = new StdSchedulerFactory(properties);
//6.启动
scheduler = schedulerFactory.GetScheduler().Result;
//7. 一、开启调度
scheduler.Start(); }
catch (Exception ex)
{ }
}
/// <summary>
/// 时间间隔执行任务
/// </summary>
/// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
/// <param name="seconds">时间间隔(单位:秒)</param>
public static async Task<bool> ExecuteInterval<T>(int seconds) where T : IJob
{
try
{
//2、创建工作任务
IJobDetail job = JobBuilder.Create<T>().Build();
// 3、创建触发器
ITrigger trigger = TriggerBuilder.Create().StartNow().
WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds)
//x.WithIntervalInMinutes(1)
.RepeatForever())
.Build();
//4、将任务加入到任务池
await scheduler.ScheduleJob(job, trigger);
return true;
}
catch (Exception ex)
{ return false;
}
} /// <summary>
/// 指定时间执行任务
/// </summary>
/// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
/// <param name="cronExpression">cron表达式,即指定时间点的表达式</param>
public static async Task<bool> ExecuteByCron<T>(string cronExpression) where T : IJob
{
try
{
//2、创建工作任务
IJobDetail job = JobBuilder.Create<T>().Build();
//3、创建触发器
ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.StartNow()
.WithCronSchedule(cronExpression)
.Build();
//4、将任务加入到任务池
await scheduler.ScheduleJob(job, trigger);
return true;
}
catch (Exception ex)
{ return false;
}
}
}
  • 采用时间表达式来定时执行
  string cronExpression = "0/5 0/1 11 * * ? ";  //=>11点没五秒执行一次调度任务

   QuartzHelper.ExecuteByCron<WriteLogJob>(cronExpression).Wait();
  • 定时执行
QuartzHelper.ExecuteInterval<WriteLogJob>().Wait();

以上便是Quartz简单使用方法。

Quartz.net任务调度的更多相关文章

  1. Spring Quartz实现任务调度

    任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...

  2. Quartz实现任务调度

    一.任务调度概述 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作,任务调度涉及多线程并发. ...

  3. quartz.net任务调度:源码及使用文档

    目录: 1.quartz.net任务调度:源码及使用文档 2.quartz.net插件类库封装 前言 前段时间把自己封装quartz.net 类库的过程总结到博客园,有网友想要看一下源码,所以就把源码 ...

  4. 项目ITP(五) spring4.0 整合 Quartz 实现任务调度

    前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用.然后需要的是 上课前20分钟 ,幸好在帮带我的学长做 p2p 的时候,接触过.自然 quartz 是首选.所以我就配置了 ...

  5. 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

    1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器, ...

  6. Java&Quartz实现任务调度

    目录 Java&Quartz实现任务调度 1.Quartz的作用 2.预备 3.Quartz核心 3.1.Job接口 3.2.JobDetail类 3.3 JobExecutionContex ...

  7. Quartz.Net任务调度框架

    Quartz.Net是一个开源的任务调度框架,非常强大,能够通过简单的配置帮助我们定时具体的操作. 相对于我们用的线程里面while(true)然后sleep来执行某个操作,应该算的上是高端,大气,上 ...

  8. Spring 中使用Quartz实现任务调度

    前言:Spring中使用Quartz 有两种方式,一种是继承特定的基类:org.springframework.scheduling.quartz.QuartzJobBean,另一种则不需要,(推荐使 ...

  9. ASP.NET MVC5 实现基于Quartz.NET任务调度

    工作之余.技术?.记是不可能记住的. 只有写点东西 才能维持得了生活这样子的.好早就像写一篇关于任务调度的文章.终究是太懒了 一.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的 ...

  10. 浅谈Quartz定时任务调度

    一  开发概述 对于具有一定规模的大多数企业来说,存在着这样一种需求:存在某个或某些任务,需要系统定期,自动地执行,然而,对大多数企业来说,该技术的实现,却是他们面临的一大难点和挑战.  对于大部分企 ...

随机推荐

  1. 百度ai语音识别

    //语音识别功能 var APP_ID = "149**323"; var API_KEY = "N1Po****o6WPUeU8er"; var SECRET ...

  2. java基础(17):包装类、System、Math、Arrays、大数据运算

    1. 基本类型包装类 大家回想下,在第三篇文章中我们学习Java中的基本数据类型时,说Java中有8种基本的数据类型,可是这些数据是基本数据,想对其进行复杂操作,变的很难.怎么办呢? 1.1 基本类型 ...

  3. 总结了11条,我对Python 装饰器的理解

    对于每一个学习 Python 的同学,想必对 @ 符号一定不陌生了,正如你所知, @ 符号是装饰器的语法糖,@符号后面的函数就是我们本文的主角:装饰器. 装饰器放在一个函数开始定义的地方,它就像一顶帽 ...

  4. DDoS攻击工具

    DDoS攻击工具 综合性工具 综合性工具除了可以进行DDoS攻击外,还可用于其他的用途,例如:端口扫描.安全审计.防火墙等.实际上,大部分综合性工具开发的原始目的并不是用于DDoS,而是"网 ...

  5. spark的wordcount

    在开发环境下实现第一个程序wordcount 1.下载和配置scala,注意不要下载2.13,在spark-core明确支持scala2.13前,使用2.12或者2.11比较好. https://ww ...

  6. ABP进阶教程6 - 布局配置

    点这里进入ABP进阶教程目录 解读参数 l - length changing input control (左上,每页显示记录数) f - filtering input (右上,过滤条件) t - ...

  7. 离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中)

    问题描述: 公司的windows电脑是内网,今天需要安装一个Twisted库,用过的应该都晓得,很常见的异步库,但是仅仅依靠Pypi上下载下来的离线.whl安装包是不行的,linux服务器都是远程连接 ...

  8. 用Toad for Oracle创建数据库表空间和用户

    打开Toad, 1,菜单栏Session—>new Connection….打开如下窗口: 2,进入之后,菜单DatebaseàSechema  Brower...找到Table Space(表 ...

  9. Quest 公司的Shareplex 与 GoldenGate比较

    Quest 公司的Shareplex 与 GoldenGate比较     2012-08-01 16:51:12 —————————————————————————————————————————— ...

  10. client-go向controller进发---code-generator实现

    这个时间长了,可能前后想了一周时间. 哎,其它不怪,只怪go的工程包管理这几年太混乱, 而国内下载资源也太漫长. 现在,只能坚持 使用go mod了. 但在使用code-generator时,go m ...