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