首页 > 代码库 > C#使用quartz.net定时问题

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=http://www.mamicode.com/"true"/>        <arg key="showDataTime" value=http://www.mamicode.com/"true"/>        <arg key="level" value=http://www.mamicode.com/"INFO"/>        <arg key="dateTimeFormat" value=http://www.mamicode.com/"HH:mm:ss:fff"/>      </factoryAdapter>    </logging>  </common>    <quartz>    <add key="quartz.scheduler.instanceName" value=http://www.mamicode.com/"ExampleDefaultQuartzScheduler" />    <add key="quartz.threadPool.type" value=http://www.mamicode.com/"Quartz.Simpl.SimpleThreadPool, Quartz" />    <add key="quartz.threadPool.threadCount" value=http://www.mamicode.com/"10" />    <add key="quartz.threadPool.threadPriority" value=http://www.mamicode.com/"2" />    <add key="quartz.jobStore.misfireThreshold" value=http://www.mamicode.com/"60000" />    <add key="quartz.jobStore.type" value=http://www.mamicode.com/"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

 

C#使用quartz.net定时问题