zoukankan      html  css  js  c++  java
  • Quartz.net 定时任务之简单任务

    一、概述

      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  并编写如下代码

     1         public static void DetailLogRecord(string type, LogTool.FolderCreationType folderCrationType, string content, bool isErasable, string filename = null)
     2         {
     3             string folderPrefixPath = (System.Configuration.ConfigurationManager.AppSettings["localLogPath"] ?? "c:\test_log_tem") + "\" + type;
     4             string folderPath = "";
     5             try
     6             {
     7                 switch (folderCrationType)
     8                 {
     9                     default: folderPath = folderPrefixPath; break;
    10                 }
    11                 if (!Directory.Exists(folderPath))
    12                 {
    13                     Directory.CreateDirectory(folderPath);
    14                 }
    15                 string filePath = folderPath + "\" + (filename ?? DateTime.Now.ToString("yyyyMMdd")) + ".log";
    16                 content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "  :
    " + content + "
    ";
    17                 if (isErasable) LogTool.RecordNewFileLog(filePath, content);
    18                 else LogTool.RecordConsecutiveLog(filePath, content);
    19             }
    20             catch
    21             {
    22                 throw;
    23             }
    24 
    25         }
    26 
    27 
    28         public enum FolderCreationType
    29         {
    30             None
    31         }
    32 
    33         private static void RecordConsecutiveLog(string filePhysicalUrl, string pursuitContent)
    34         {
    35             System.IO.FileStream fs = new System.IO.FileStream(filePhysicalUrl, FileMode.OpenOrCreate, FileAccess.Write);
    36             System.IO.StreamWriter m_streamWriter = new System.IO.StreamWriter(fs);
    37             m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
    38 
    39             string resultStr = Environment.NewLine + pursuitContent;
    40 
    41             m_streamWriter.WriteLine(resultStr);
    42             m_streamWriter.Flush();
    43             m_streamWriter.Close();
    44             fs.Close();
    45         }
    46 
    47         private static void RecordNewFileLog(string filePhysicalUrl, string content)
    48         {
    49             System.IO.StreamWriter sw = new System.IO.StreamWriter(filePhysicalUrl);
    50             sw.WriteLine(content);
    51             sw.Close();
    52         }
    53 
    54         private static void CreateFolder(string url)
    55         {
    56             if (Directory.Exists((url)) == false)
    57             {
    58                 Directory.CreateDirectory((url));
    59             }
    60         }
    View Code

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

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

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

     1 public class JobClass:IJob
     2     {
     3          //日志
     4          private static ILog _log = LogManager.GetLogger(typeof(JobClass));
     5 
     6         /// <summary>
     7         /// 构造方法
     8         /// </summary>
     9          public JobClass()
    10         { }
    11         /// <summary>
    12         ///  作业默认接口  
    13         /// </summary>
    14         /// <param name="context"></param>
    15         public void Execute(IJobExecutionContext context)
    16         {
    17             LogTool.DetailLogRecord("a", LogTool.FolderCreationType.None, "我的第一个任务", false);
    18         }
    19     }
    View Code

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

     1 public void FirstQuartz()
     2         {
     3             StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
     4             //得到调度
     5             IScheduler sched = schedulerFactory.GetScheduler();
     6             //构造一个调度工厂
     7             LogTool.DetailLogRecord("a", LogTool.FolderCreationType.None, "创建调度器成功", false);
     8             sched.Start();
     9 
    10             IJobDetail job = JobBuilder.Create<JobClass>()
    11                     .WithIdentity("作业名称", "作业分组")
    12                     .Build();
    13                 // 触发作业
    14                 ITrigger trigger = TriggerBuilder.Create()
    15 
    16                 #region 使用 时间间隔  先不介绍 
    17                     //.WithIdentity("myTrigger", "group1")
    18                     //.StartNow()
    19                     //.WithSimpleSchedule(x => x
    20                     //    .WithIntervalInSeconds(5)
    21                     //    .RepeatForever())
    22                     //.Build();
    23                 #endregion
    24 
    25                 #region 使用cron 规则
    26 
    27                     .WithIdentity("触发器名称", "触发器分组")
    28                     .WithCronSchedule("/5 * * ? * *") // 每隔五秒执行一次  这个表达式我们将在下一篇介绍
    29                     .StartAt(DateTime.UtcNow)
    30                     .WithPriority(1)
    31                     .Build();
    32                 #endregion
    33                 // 将作业和触发器添加到调度器
    34                 sched.ScheduleJob(job, trigger);
    35 
    36             // 2天后关闭作业调度  定时关闭任务实例  
    37             //Thread.Sleep(TimeSpan.FromDays(2));
    38 
    39             //   _sched.Shutdown(); // 结束
    40         }
    View Code

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

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

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

    四、测试

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

      

        (1)点击按钮开启任务 

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

      

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

    五、源码及说明

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

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

  • 相关阅读:
    微信JS SDK Demo
    微信JS SDK使用权限签名算法
    微信JS接口
    微信分享JS接口失效说明及解决方案
    微信支付开发(2) 扫码支付模式一
    不懂技术的人不要对懂技术的人说这很容易实现
    独立开发者经验分享
    微信公开课PRO版张小龙演讲全文
    RC4加密算法的原理及实现
    上传APP加入视频预览--精简点名
  • 原文地址:https://www.cnblogs.com/cyzf/p/6877916.html
Copyright © 2011-2022 走看看