zoukankan      html  css  js  c++  java
  • Quartz.net2.2初体验

    简介:Quartz.net是一个开源的作用调度框架,非常强大,能够通过简单的配置帮助我们定时具体的操作。相对于我们用的线程里面while(true)然后sleep来执行某个操作,应该算的上是高端,大气,上档次了。目前最新版本是2.2,新的版本里面有些方法名发生了变化,从之前的版本用过来的人应该会有体会.这里我使用最常用,也是最稳定的方式--Windows服务里面使用Quartz.net,并且使用配置的方式来设置触发器。

    步骤:

    1.定义使用的job:就是我们具体要执行的操作.

    namespace Quartz.MyJobs
    {
        public class HelloWorldJob : IJob
        {
            #region IJob 成员
    
            public void Execute(IJobExecutionContext context)
            {
                //LogHelper.LogHelper.Log("执行HelloWorld Job");
                String path = AppDomain.CurrentDomain.BaseDirectory + "Job\";
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                File.AppendAllText(path + "job.txt", DateTime.Now + "
    ");
            }
    
            #endregion
        }
    }

    有了job,之后就在配置里面以Cron表达式的方式来设置Trigger和job配置节(quartz_jobs.xml)

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- This file contains job definitions in schema version 2.0 format -->
    
    <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
    
      <processing-directives>
        <overwrite-existing-data>true</overwrite-existing-data>
      </processing-directives>
    
      <schedule>
    
        <job>
            <name>HelloWorldJob</name>
            <group>sampleGroup</group>
            <description>Sample job for Quartz Server</description>
            <job-type>Quartz.MyJobs.HelloWorldJob, Quartz.MyJobs</job-type>
            <durable>true</durable>
            <recover>false</recover>
        </job>
    
        <trigger>
          <cron>
            <name>sampleSimpleTrigger</name>
            <group>sampleSimpleGroup</group>
            <description>Simple trigger to simply fire sample job</description>
            <job-name>HelloWorldJob</job-name>
            <job-group>sampleGroup</job-group>
            <cron-expression>0/3 * * * * ?</cron-expression> <!--每3秒中执行一次-->
          </cron>
        </trigger>
      </schedule>
    </job-scheduling-data>

    还有有一个quartz.config配置文件,里面有这样一行:quartz.plugin.xml.fileNames = ~/quartz_jobs.xml(这里的文件对应我们上面配置文件夹)。

    现在job和trigger已经定义好了,接下来我们在Windows服务里面声明一个调度器把两者结合起来就OK了。

    namespace Quartz.WinService
    {
        partial class MyQuartzService : ServiceBase
        {
            IScheduler sched = null;
            public MyQuartzService()
            {
                InitializeComponent();
                ISchedulerFactory factory = new StdSchedulerFactory();
                sched = factory.GetScheduler();
            }
    
            protected override void OnStart(string[] args)
            {
                sched.Start();
                LogHelper.LogHelper.Log("服务启动...");
            }
    
            protected override void OnStop()
            {
                sched.Shutdown();
                LogHelper.LogHelper.Log("服务停止");
            }
        }
    }

    到这里就结束了。如果你的项目里面需要定时执行某个操作,使用Quartz.net绝对是非常棒的选择。

    关于Cron表达式的了解可以点击这里

  • 相关阅读:
    自动化测试如何解析excel文件?
    Unittest加载执行用例的方法总结
    pytest进阶之配置文件
    [编程题] 把二叉树打印成多行
    [编程题]求1+2+3+....n
    [编程题]-[位运算技巧系列]不用加减乘除做加法
    [编程题]数值的整数次方
    [编程题]构建乘积数组
    [编程题]变态跳台阶
    [编程题][剑指 Offer 10- II. 青蛙跳台阶问题]
  • 原文地址:https://www.cnblogs.com/mszhangxuefei/p/interests-4.html
Copyright © 2011-2022 走看看