一、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. WeakHashMap,源码解读

    概述 WeakHashMap也是Map接口的一个实现类,它与HashMap相似,也是一个哈希表,存储key-value pair,而且也是非线程安全的.不过WeakHashMap并没有引入红黑树来尽量 ...

  2. 易优CMS:volist的基础应用

      [基础用法] 名称:volist 功能:数据/记录循环输出标签 语法: {eyou:channel type='top'}            {eyou:volist name='$field ...

  3. [转]C++字符串操作函数_tcschr、_tcsrchr

    原文出处:https://blog.csdn.net/eickandy/article/details/50083169 C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,本 ...

  4. 证券secuerity英语secuerity安全

    中文名:证券 外文名:security.secuerity 类别:经济权益凭证统称 组成:资本证券.货币证券和商品证券 作用:用来证明持者权益的法律凭证 图集 目录 1 发展历程 ? 世界 ? 中国 ...

  5. SQL常用增删改查语句--来源于网络

    1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values ('开心朋朋' ...

  6. [PHP] PHP PDO与mysql的连接单例防止超时情况处理

    这个数据库类主要处理了单例模式下创建数据库对象时,如果有两次较长时间的间隔去执行sql操作,再次处理会出现连接失败的问题,利用一个cache数组存放pdo对象与时间戳,把两次执行之间的时间进行了比较, ...

  7. C学习笔记(8)--- 文件读写

    1.C 文件读写: 一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节.C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件. a.打开文件: FILE *f ...

  8. html学习之二(常用标签练习)

    <!DOCTYPE html><head> <meta charset="utf-8"> <title>锚点链接</title ...

  9. LeetCode 分治算法

    分治算法:是将问题划分为一些独立的子问题,递归的求解个子问题,然后合并子问题的解而得到原问题的解. 分治算法步骤 step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题: ...

  10. [C9] 降维(Dimensionality Reduction)

    降维(Dimensionality Reduction) 动机一:数据压缩(Motivation I : Data Compression) 数据压缩允许我们压缩数据,从而使用较少的计算机内存或磁盘空 ...