在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、Quartz.NET介绍Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。 官网:http://www.quartz-scheduler.net/ 源码:https://github.com/quartznet/quartznet 二、Quartz.NET用途一,可以定时发邮件通知。 二 , 电商网站的定时打折活动。(比如规定11月11日 淘宝购买女朋友打八折) 三, 定时对数据更新 或者添加。 四,自己朋友生日。 可以定时发生日祝福。 等等 (我也不一一举例了) 三、Quartz.NET安装我使用的VS版本是2015的 选择工具 - NuGet包管理 - 管理解决方案的NuGet包 输入 Quartz.NET 安装
还可以通过NuGet控制台 通过安装命令 Install-Package Quartz 四、Quartz.NET实现思路一,继承并实现IJob接口,在Execute 方法中写你要做的事情(切记 ) 二,使用Quartz 中的API 定义好 工作 触发器 以及工厂 三,加入可视化(远程管理) 四,建立配置的通讯。 五,在全局类(Global.asax)Application_Start注册并开启定时任务
五、上代码其中JobWork 是我的定义的工作文件 里面有你要执行的工作已经对应的触发器(一个工作对应一个触发器) 首先 我写了一个向文本文件中插入文字的方法已经触发器 (注意 必须继承IJob 要做的事情写在 Execute 中)
public class AddMassagejob : IJob public class AddMasagerTriggerServer { public ITrigger AddMasagerTrigger() { var trigger = TriggerBuilder.Create() .WithIdentity("添加消息到日志", "作业触发器") .WithSimpleSchedule(x => x //.WithIntervalInSeconds(5) // .WithIntervalInHours(5) .WithIntervalInMinutes(5) //每五分钟执行一次 .RepeatForever()) .Build(); return trigger; } } 我这里设置的是5分钟执行一次。 你也可以让他5秒 5小时执行一次。 关于时间配置 官方一些常用的实例 0 0 12 * * ? 每天12点触发 有兴趣的朋友可以了解 具体含义规范
然后就是创建一个作业 这里我用的是泛型去创建 public class JobServer<T> where T : IJob { public string JobName { get; set; } public string JobGroup { get; set; } public IJobDetail CrateJob() { IJobDetail job1 = JobBuilder.Create<T>() //创建一个作业 .WithIdentity(JobName, JobGroup) //JobName 代表你要执行的这个任务的名称。 JobGroup任务分组 .Build(); return job1; } } 接下来就是一些 Quartz 的配置(线程配置 远程配置等) 当然 你也可以选择写在配置文件 或者XML文件中 public class JobBase { public static IScheduler Scheduler { get { var properties = new NameValueCollection(); // 设置线程池 properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; //设置线程池的最大线程数量 properties["quartz.threadPool.threadCount"] = "5"; //设置作业中每个线程的优先级 properties["quartz.threadPool.threadPriority"] = ThreadPriority.Normal.ToString(); // 远程输出配置 properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz"; properties["quartz.scheduler.exporter.port"] = "1996"; //配置端口号 properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler"; properties["quartz.scheduler.exporter.channelType"] = "tcp"; //协议类型 //创建一个工厂 var schedulerFactory = new StdSchedulerFactory(properties); //启动 var scheduler = schedulerFactory.GetScheduler(); return scheduler; } } public static void AddSchedule<T>(JobServer<T> jobServer,ITrigger trigger, string jobName, string jobGroup) where T : IJob { jobServer.JobName = jobName; jobServer.JobGroup = jobGroup; Scheduler.ScheduleJob(jobServer.CrateJob(), trigger); } }
绑定trigger和job
然后就工作层 也就是任务的声明调用处 public class JobManager { public static void State() { //开启调度 JobBase.Scheduler.Start(); // 第一个参数是你要执行的工作(job) 第二个参数是这个工作所对应的触发器(Trigger)(例如:几秒或几分钟执行一次) JobBase.AddSchedule(new JobServer<AddMassagejob>(), new AddMasagerTriggerServer().AddMasagerTrigger(),"每隔五分钟向文本中写入文字","消息工作"); JobBase.AddSchedule(new JobServer<DiscountedShopJob>(), new DiscountedShopTriggerServer().GoodsDisCountTrigger(),"每月的最后一天10.15开启打折活动","折扣活动"); } } 在全局类中加入下面代码 开启工作 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); JobManager.State(); } }
代码部分已经完成了 接下来就是如何使用 首先 安装一个远程管理 也就是可视化操作 (你不需要写任何代码) 安装步骤一样。 在控制台 执安装命令 PM> Install-Package CrystalQuartz.Remote
安装之后你会在web.config 中发现这样的代码 其中下方红色框起来的部分 其中SchedulerHost 对应的端口号和远程名称 都要对应上方代码中配置。 一旦保持一致 意味着达成了通讯。共通了 然后启动项目在路由加上/CrystalQuartzPanel.axd 好了。 该看看效果了 由于个人英语实在有限。 命名有误 。请各位看官多多担待 谢谢大家 |
请发表评论