一、概述

  1、quartz.net 是一款从java quartz 上延伸出来的定时任务框架。  

  2、我在网上看到很多大神写过关于quartz.net 的博客、文章等,在这些博客文章里也学会了很多关于quartz的知识。今天博主也想写一篇关于quartz的文章(不足之处望大神斧正),希望能帮助正在学习quartz路上的兄弟姐妹,顺便也巩固自己。

  3、quartz这篇博客会从最基础的开始,之后会逐渐的升级,如果有喜欢的兄弟姐妹,请关注我的博客,博主会持续更新  

二、搭建

  1、打开vs创建新的mvc空项目,取名:QuartzMVC 如图 

  

  2、完成上一步,接下来我们安装quart

    (1)打开vs 工具-->库程序包管理器-->程序包管理台   打开程序包管理台之后 输入

  

    (2)安装成功之后,你会看见项目里多了一个   job_scheduling_data_2_0.xsd文件(无需理会)

  

  3、同第2步,我们相继安装  log4net.dll 、 Common.Logging.dll 、Common.Logging.Core.dll 3个日志工具

    (1)安装好如下图

  

  4、配置web.config,添加日志输出路径  如图

  

三、代码

  1、添加一个控制器取名Home

    (1)在Home控制器里添加一个视图Index

    (2)在QuartzMVC项目下建立日志工具类 取名:LogTool  并编写如下代码

         public static void DetailLogRecord(string type, LogTool.FolderCreationType folderCrationType, string content, bool isErasable, string filename = null)
{
string folderPrefixPath = (System.Configuration.ConfigurationManager.AppSettings["localLogPath"] ?? "c:\\test_log_tem") + "\\" + type;
string folderPath = "";
try
{
switch (folderCrationType)
{
default: folderPath = folderPrefixPath; break;
}
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
string filePath = folderPath + "\\" + (filename ?? DateTime.Now.ToString("yyyyMMdd")) + ".log";
content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " :\r\n" + content + "\r\n";
if (isErasable) LogTool.RecordNewFileLog(filePath, content);
else LogTool.RecordConsecutiveLog(filePath, content);
}
catch
{
throw;
} } public enum FolderCreationType
{
None
} private static void RecordConsecutiveLog(string filePhysicalUrl, string pursuitContent)
{
System.IO.FileStream fs = new System.IO.FileStream(filePhysicalUrl, FileMode.OpenOrCreate, FileAccess.Write);
System.IO.StreamWriter m_streamWriter = new System.IO.StreamWriter(fs);
m_streamWriter.BaseStream.Seek(, SeekOrigin.End); string resultStr = Environment.NewLine + pursuitContent; m_streamWriter.WriteLine(resultStr);
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
} private static void RecordNewFileLog(string filePhysicalUrl, string content)
{
System.IO.StreamWriter sw = new System.IO.StreamWriter(filePhysicalUrl);
sw.WriteLine(content);
sw.Close();
} private static void CreateFolder(string url)
{
if (Directory.Exists((url)) == false)
{
Directory.CreateDirectory((url));
}
}

     (3)打开视图Index添加如下代码

 @using (Html.BeginForm("FirstQuartz", "Home", FormMethod.Post))
{
<input type="submit" value="点击开启第一个定时任务"/>
}

      (4)在QuartzMVC项目下的Model 文件夹下建立JobClass类并继承IJob接口 代码如下

 public class JobClass:IJob
{
//日志
private static ILog _log = LogManager.GetLogger(typeof(JobClass)); /// <summary>
/// 构造方法
/// </summary>
public JobClass()
{ }
/// <summary>
/// 作业默认接口
/// </summary>
/// <param name="context"></param>
public void Execute(IJobExecutionContext context)
{
LogTool.DetailLogRecord("a", LogTool.FolderCreationType.None, "我的第一个任务", false);
}
}

    (5)打开Home控制器添加方法“FirstQuartz”如下代码

 public void FirstQuartz()
{
StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
//得到调度
IScheduler sched = schedulerFactory.GetScheduler();
//构造一个调度工厂
LogTool.DetailLogRecord("a", LogTool.FolderCreationType.None, "创建调度器成功", false);
sched.Start(); IJobDetail job = JobBuilder.Create<JobClass>()
.WithIdentity("作业名称", "作业分组")
.Build();
// 触发作业
ITrigger trigger = TriggerBuilder.Create() #region 使用 时间间隔 先不介绍
//.WithIdentity("myTrigger", "group1")
//.StartNow()
//.WithSimpleSchedule(x => x
// .WithIntervalInSeconds(5)
// .RepeatForever())
//.Build();
#endregion #region 使用cron 规则 .WithIdentity("触发器名称", "触发器分组")
.WithCronSchedule("/5 * * ? * *") // 每隔五秒执行一次 这个表达式我们将在下一篇介绍
.StartAt(DateTime.UtcNow)
.WithPriority()
.Build();
#endregion
// 将作业和触发器添加到调度器
sched.ScheduleJob(job, trigger); // 2天后关闭作业调度 定时关闭任务实例
//Thread.Sleep(TimeSpan.FromDays(2)); // _sched.Shutdown(); // 结束
}

    (5)到这里我们的第一个简单的quartz任务就搭建完成。

  2、这里只写了开启任务的方法,没有写关闭的方法,如果需要可以自由添加

    (1)关闭方法为  _sched.Shutdown(),在开启方法里最后注释了,读者可以单独分离出来

四、测试

  1、运行项目会看到 如下图页面

  

    (1)点击按钮开启任务

    (2)打开本地磁盘e  你会看到一个文件夹QuartzLog里面有一个日志文件就是你的任务记录 如图

  

    (3)我们可以看到任务是我们定义好的每五秒钟执行一次

五、源码及说明

  1、注:有事请留言,要源码请加qq群:460362190

  2、如果喜欢我的文章请点关注O(∩_∩)O~~ ,有问题留言哦   

Quartz.net 定时任务之简单任务的更多相关文章

  1. C# Quartz.Net 定时任务的简单使用

    最近做了一个定时执行任务的软件. 执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象. 我做的是每天的9点和16点执行一次任务,以此记录: 首先,获得Quartz.N ...

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

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

  3. 使用Quartz创建定时任务

    项目开发中经常需要定时循环执行某些任务 比如定时发送报表,定时发送邮件,亦或者定时清理缓存,定时更新数据等等 有些时候可以简单地利用Windows Server的计划任务执行程序 Linux也有相应的 ...

  4. Spring+Quartz 实现定时任务的配置方法

    Spring+Quartz 实现定时任务的配置方法 整体介绍 一.Quartz介绍 在企业应用中,我们经常会碰到时间任务调度的需求,比如每天凌晨生成前天报表,每小时生成一次汇总数据等等.Quartz是 ...

  5. Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置 >>>>>>>>>>>>&g ...

  6. 【spring-boot】 springboot整合quartz实现定时任务

    在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的. spring支持多种定时任务的实现.我们来介绍下使用spring的定时器和使用quartz定时器 1.我们使用s ...

  7. SpringBoot集成Quartz实现定时任务

    1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...

  8. springboot整合Quartz实现定时任务

    1.maven依赖: <!--quartz--> <dependency> <groupId>org.quartz-scheduler</groupId> ...

  9. Spring Boot集成quartz实现定时任务并支持切换任务数据源

    org.quartz实现定时任务并自定义切换任务数据源 在工作中经常会需要使用到定时任务处理各种周期性的任务,org.quartz是处理此类定时任务的一个优秀框架.随着项目一点点推进,此时我们并不满足 ...

随机推荐

  1. 性能调优之剖析OutOfMemoryError

    性能调优之剖析OutOfMemoryError   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询q ...

  2. JavaScript 数组操作方法

    这些数组的操作方法会改变原来的数组.在使用 Vue 或者 Angular 等框架的时候会非常实用,使用这些方法修改数组会触发视图的更新. Array.prototype.push 该方法可以在数组末尾 ...

  3. ajax第三步

    ajaxSend()函数用于设置当AJAX请求即将被发送时执行的回调函数. 这是一个全局AJAX事件函数,用于为任何AJAX请求的ajaxSend事件绑定事件处理函数.当AJAX请求即将被发送时,将触 ...

  4. myeclipse2017破解失败解决办法

    最近,笔者安装的myeclipse2017破解出了问题,破解本来是很简单的事,就是几步而已,但是一直出问题,现在安利一波myeclipse2017版破解失败解决办法.诸如下图:()因为笔者已经破解好了 ...

  5. 1137: 零起点学算法44——多组测试数据输出II

    1137: 零起点学算法44--多组测试数据输出II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: ...

  6. 使用Dockerfile制作自己的Docker镜像

    一.背景 一直以来的开发流程都是先从Docker Hub中获取到基础镜像,之后在这个镜像的基础上做开发,以满足一定的需求或者提供某种服务,并由此产生新的镜像,然后就可以push到Docker Hub中 ...

  7. java swing组件的一些基本属性

    JLabel get/setText(): 获取/设置标签的文本. get/seticon(): 获取/设置标签的图片. get/setHorizontalAlignment(): 获取/设置文本的水 ...

  8. JQuery插件之Animate.css和 jquery-aniview

    Animate.css 一款强大的预设css3动画库 简介 animate.css 是一个来自国外的 CSS3 动画库,它预设了抖动(shake).闪烁(flash).弹跳(bounce).翻转(fl ...

  9. time模块简介

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...

  10. Python 三级菜单与优化(一层循环嵌套)

    优化的思路是使用单层循环嵌套完成三级菜单,这个优化思路我非常喜欢,我喜欢在编程的时候用最少的东西写出同样的效果,通常这样会绕来绕去,但非常有趣!!! 需求: 1.运行程序输出第一级菜单: 2.选择一级 ...