C#使用quartz.net定时问题

因工作需要需要完成定时查询数据。。因此在了解之后完成了一个demo

所需要的dll在该地址下载

http://pan.baidu.com/s/1sjNQLXV

首先引入quartz这个dll。。。

 在Quartz.NET有一个叫做quartz.properties的配置文件,它允许你修改框架运行时环境。缺省是使用Quartz.dll里面的quartz.properties文件。当然你可以在应用程序配置文件中做相应的配置 

ps:当然。由于本人是水平有限。上面那段话是复制别人的。我没去管那个什么配置文件,为了省事,就修改了配置文件。

<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>
  
  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging">
        <arg key="showLogName" value="true"/>
        <arg key="showDataTime" value="true"/>
        <arg key="level" value="INFO"/>
        <arg key="dateTimeFormat" value="HH:mm:ss:fff"/>
      </factoryAdapter>
    </logging>
  </common>
  
  <quartz>
    <add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler" />
    <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>

当然。这是需要引入common.logging和C5这两个dll的。。

具体这两个dll的作用我也没搞清。。等俺明白了再重新编辑。。

配置文件配置完成之后。。

编写一个继承Quartz.IJob的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Common.Logging;
using Quartz;

namespace WebDemo
{
    public class quartz : Quartz.IJob
    {
        private static ILog _log = LogManager.GetLogger(typeof(quartz));
        public void Execute(Quartz.IJobExecutionContext context)
        {
            Test();
        }
        /// <summary>
        /// 打开dos界面
        /// </summary>
        private void Test()
        {
            System.Diagnostics.Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.CreateNoWindow = false;
            p.Start();
            //这行命令式关机命令
            //p.StandardInput.WriteLine("shutdown -s -t 0");
            //p.StandardInput.WriteLine("exit");
            p.Close();   
        }
   
    }
}

然后我在Global类的Application_Start方法调用该类

void Application_Start(object sender, EventArgs e)
        {
            // Code that runs on application startup

            
            Quartz.ISchedulerFactory sf = new Quartz.Impl.StdSchedulerFactory();
            sched = sf.GetScheduler();
            Quartz.JobKey jobkey = new Quartz.JobKey("myjob", "mygroup");
            Quartz.IJobDetail job = Quartz.JobBuilder.Create<WebDemo.quartz>().WithIdentity(jobkey).Build();

            //比较复杂的应用 
            Quartz.Spi.IOperableTrigger trigger = new Quartz.Impl.Triggers.CronTriggerImpl("trigName", "group1", "0 31 10 ? * WED ");

            sched.ScheduleJob(job, trigger);

            sched.Start();

        }
"0 31 10 ? * WED "这个的意思是每到周三的早上10点31分0秒就自动执行。。dos窗口就自动打开。。
但是前提是。。程序必须运行着。。没有关闭。。否则没有任何意义。。。
void Application_End(object sender, EventArgs e)
        {
            //  Code that runs on application shutdown
            //   在应用程序关闭时运行的代码
            if (sched != null)
            {
                sched.Shutdown(true);
            }
          
        }

关于具体定时的格式可参考:

http://blog.csdn.net/weinierbian/article/details/6237337

同时也可在这学习:

http://www.cnblogs.com/shanyou/archive/2007/08/25/quartznettutorial.html

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。