Quartz.NET(作业调度框架) 学习笔记(二)【Hello Job】

 1,为了更好的学习作业调度框架,先说Quartz.NET的几个必要对象

1.IJob(作业)

2.Scheduler(调度器)

3.Trigger (触发器)

要执行Job必须实现"IJob"接口或者"IStatefulJob"接口,这两个接口都有一个方法:

public void Execute(JobExecutionContext context)

这个方法就是要job要执行的方法,IJob是无状态Job ,"IStatefulJob" 是有状态Job,具体有什么不同在后面会有介绍

Scheduler:是将触发器和Job进行关联的一个类,启用Job 就要用到该类的start()方法,停止 shutdow()方法,暂停Standby()方法

Trigger :控制Job的执行周期 以及执行次数等。

先创建意个作业类 HelloJob实现 IJob接口

/// <summary>
    /// 作业类
    /// </summary>
    public class HelloJob :IJob
    {
        /// <summary>
        /// 作业
        /// </summary>
        /// <param name="context"></param>
        public void Execute(JobExecutionContext context)
        {
            ILog log = LogManager.GetLogger(typeof(HelloJob));
            log.Info("My frist Job");
            Console.WriteLine("Hello Job");
        }


    }
在创建一个类负责调用Job

public class SimpleExample
    {
        public void RunJob()
        {

            ILog log = LogManager.GetLogger(typeof(HelloJob));
            log.Info("调度工厂创建调度器初始化.....");

            //实例化调度器工厂
            StdSchedulerFactory scheduler = new StdSchedulerFactory();

             //通过调度器工厂返回一个调度器实例
            IScheduler sd = scheduler.GetScheduler();
            log.Info("创建调度器成功");

            log.Info("初始化Job...");

             //frist_job:Job的名称,frist:Job的组名,typeof(HelloJob) 作业类
            JobDetail job = new JobDetail("frist_job","frist", typeof(HelloJob));
         
            //TriggerUtils 工具类,提供简便的方法配置Trigger
            //TriggerUtils 的方法 makeSecondlyTrigger() 来创建一个每5秒种激发一次

            Trigger trigger = TriggerUtils.MakeSecondlyTrigger(5);

            //Trigger的逻辑名称,不能没有逻辑名称
            trigger.Name = "tr";

            // 向Scheduler注册job
            sd.ScheduleJob(job, trigger);
            log.Info("job运行......");
         
            sd.Start();
         
           
        }
    }
 

 StdSchedulerFactory scheduler = new StdSchedulerFactory();
实例化调度器工厂类,由工厂产生调度器。

StdSchedulerFactory  这个工厂类,必须依赖于app.config正确配置 才能正确执行,当然不配置的话还有另一个工厂类

 DirectSchedulerFactory scheduler = DirectSchedulerFactory.Instance;
  scheduler.CreateVolatileScheduler(10);
这个工厂类,完全是由手动创建的,

DirectSchedulerFactory.Instance 初始化

scheduler.CreateVolatileScheduler(10); //多少个工作者线程被创建用来处理 Job


看下面的app.config也信息的配置,它是为StdSchedulerFactory 服务的

<add key="quartz.threadPool.threadCount" value="10" />

IScheduler sd = scheduler.GetScheduler();
调度器不能直接自己实例化自己,只能通过StdSchedulerFactory 调度器工厂返回一个IScheduler 。

JobDetail job = new JobDetail("frist_job","frist", typeof(HelloJob));
JobDetail类相当于Job的一个详细信息类,Job是JobDetail 的一部分,Job的所有信息 都由JobDetail 携带

 Trigger trigger = TriggerUtils.MakeSecondlyTrigger(5);
这个触发器,是由quartz提供的TriggerUtils工具类来实例化的,TriggerUtils这个工具类提供很多种控制时间的方法,比如说,控制每天下午6点 触发一次。
 sd.ScheduleJob(job, trigger);
将作业和触发器注册的到调度器中,由调度器的sd.Start();来启动

ILog log = LogManager.GetLogger(typeof(HelloJob));
这个一个输出DUG信息,是quartz中的Common.Logging 这个Dll中的,要在app.config正确配置才能正常输出。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <sectionGroup name="common">
      <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
  </configSections>
 
<!--配置log信息-->
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging">
        <arg key="showLogName" value="false" />
        <arg key="showDataTime" value="false" />
        <arg key="level" value="Debug" />
        <arg key="dateTimeFormat" value="HH:mm:ss:fff" />
      </factoryAdapter>
    </logging>
  </common>

  <!--分别设置调度器的实例名(instanceName) 和实例 ID (instanceId)
  threadCount 属性控制了多少个工作者线程被创建用来处理 Job
  threadPriority 属性设置工作者线程的优先级。
  -->
  <quartz>
    <add key="quartz.scheduler.instanceName" value="Jack_Example" />

    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="10" />
    <add key="quartz.threadPool.threadPriority" value="2" />

    <add key="quartz.jobStore.misfireThreshold" value="60000" />
    <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />
   
</quartz>
 
 
  <!--配置数据连接-->
  <connectionStrings>
    <add name="SqlConnectionStrings" connectionString="User=sa;Password=123456;Database=test; Server=."/>
  </connectionStrings>
</configuration>
执行

 class Program
    {
        static void Main(string[] args)
        {

            SimpleExample1 simple = new SimpleExample1();
            simple.RunJob();
          

        }
    }

 Quartz.NET(作业调度框架) 学习笔记(二)【Hello Job】_第1张图片


 

 

你可能感兴趣的:(框架,quartz,Class,工具,logging,作业)