首页 > 代码库 > 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定时问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。