使用Quartz.Net同时执行多个任务
在Quartz.Net中可能我们需要在某一时刻执行多个任务操作,而又不想创建多个任务。Quartz.Net为我们提供了多个ScheduleJob的重载来实现多个一次执行多个任务。
// 创建一个组任务的触发器,如果某个给定的任务或触发器已经存在(Job.Key不唯一)和replace为false时,就会抛出异常
void ScheduleJob(IJobDetail jobDetail, ISet<ITrigger> triggersForJob, bool replace);
利用这个方法可以创建一组任务来同时执行。
首先创建一个任务调度类:SystemScheduler。将创建好的每个任务设置好key之后加入到触发器组中
public class SystemScheduler
{
public static SystemScheduler CreateInstance()
{
return new SystemScheduler();
} private IScheduler _scheduler; public void StartScheduler()
{
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
_scheduler = schedulerFactory.GetScheduler(); // 读取所有任务
var jobs = Job.ReadJobs();
if (jobs != null && jobs.Any())
{
// 创建一个触发器组对象
Quartz.Collection.ISet<ITrigger> triggers = new Quartz.Collection.HashSet<ITrigger>(); //创建一个Job来执行特定的任务
IJobDetail jobDetail = new JobDetailImpl("SettingHandler", typeof(SettingHandler)); foreach (var job in jobs)
{
// 设置触发器key
TriggerKey key = new TriggerKey(job.Key); //创建并定义触发器的规则(每天执行一次时间为:时,分)
ITrigger trigger =
TriggerBuilder.Create().WithIdentity(key)
.WithDailyTimeIntervalSchedule(
a => a.WithIntervalInHours().OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(job.Hour, job.Minute))).Build();
triggers.Add(trigger);
}
_scheduler.ScheduleJob(jobDetail, triggers, true); //开始
_scheduler.Start();
}
} /// <summary>
/// 停止任务
/// </summary>
public void StopScheduler()
{
_scheduler.Shutdown();
}
}
创建任务处理类SettingHandler来执行任务:
public class SettingHandler : IJob
{
public void Execute(IJobExecutionContext context)
{
LogWriter.ToInfo(string.Format("{0} 开始执行设置CU任务", DateTime.Now.ToString()));
try
{
UpdateTs.UpdateDt = DateTime.Now; List<Job> jobs = Job.ReadJobs();
string jobKey = context.Trigger.Key.Name;
// 获取任务
var job = jobs.FirstOrDefault(a => a.Key.Equals(jobKey));
if (job != null)
{
LogWriter.ToInfo("执行了一次任务:key=" + jobKey);
// 任务处理逻辑
}
}
catch (Exception ex)
{
LogWriter.ToError("执行更新CU错误", ex);
}
}
}
最后启动任务调度程序
private void Form1_Load(object sender, EventArgs e)
{
SystemScheduler systemScheduler = SystemScheduler.CreateInstance();
systemScheduler.StartScheduler();
}
使用Quartz.Net同时执行多个任务的更多相关文章
- quartz 两次执行问题
最近发现网站(xiayule.net)越写越大,有些东西已经难以维护了,想要添加个功能,都得斟酌半天 项目中有很多可重构的地方,小重构一直进行,大的不敢动,毕竟没有很多时间做测试. 最后,决定精简代码 ...
- 使用Quartz.net来执行定时任务
Quartz.net使用方法:http://www.cnblogs.com/lizichao1991/p/5707604.html 最近,项目中需要执行一个计划任务,组长就让我了解一下Quartz.n ...
- 用Quartz处理定时执行的任务
这次做的项目中,有一部分功能需要实现定时执行.呃,这样说可能有点笼统,打个比方吧.例如用户在登录的时候,连续输错3次密码后,系统会将该用户冻结,不再允许该用户登录系统,等到了晚上零晨时分,再为所有被冻 ...
- spring学习笔记--quartz和定时任务执行
前言: 最近要写一个定时任务, 用于同步数据. 以往这种涉及数据库操作的定时脚本, 都会采用python+crontab的方式来实现. 这次画风大转, 决定试试用spring+quartz来实现一下. ...
- java定时任务以及Spring使用Quartz调度器执行定时任务
java下的java.util.Timer中类可以实现定时执行任务的执行: 如:让任务立即执行,每隔1s循环执行一次 public class TimerClass { public static v ...
- Spring的quartz定时器重复执行二次的问题解决
Spring的quartz定时器同一时刻重复执行二次的问题解决 最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的ha ...
- Tomcat集群Spring+Quartz多次执行解决方案记录
由于在集群环境下定时器会出现并发和重复执行的问题,我再三考虑记录有5 一.把定时器模块单独拿出来放到一台tomcat或者新建一个Java工程手动启动定时器,这样定时器的任务就可以从原来的集群中抽离开来 ...
- quartz定时定时任务执行两次
quartz框架没问题. 流程: sping-quartz配置 <?xml version="1.0" encoding="UTF-8"?> < ...
- .NET Core使用Quartz执行调度任务进阶
一.前言运用场景 Quartz.Net是一个强大.开源.轻量的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数 ...
随机推荐
- Android 串口蓝牙通信开发Java版本
Android串口BLE蓝牙通信Java版 0. 导语 Qt on Android 蓝牙通信开发 我们都知道,在物联网中,BLE蓝牙是通信设备的关键设备.在传统的物联网应用中,无线WIFI.蓝牙和Zi ...
- title中添加小图标
<title>标签中不能添加图片,但是可以添加小图标. 步骤: 1.做一个16 X 16像素的ico格式的图标.具体操作方法是,先在Photoshop中做一个透明背景的16 X 16像素P ...
- Python3爬虫(十六) pyspider框架
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.pyspider介绍1.基本功能 提供WebUI可视化功能,方便编写和调试爬虫 提供爬取进度监控.爬取结果查看 ...
- mysql 长连接断开问题
从MySQL 5.0.3开始,默认情况下禁止再连接,这是5.0.13中的新选项,提供了一种以显式方式设置再连接行为的方法. mysql应用程序建立的长连接,大约过8小时会断开[没测过,网上都是这么说的 ...
- chapter1
任何语言的开篇,想要学下去肯定要搞环境啦,下面我们就开始. 安装Kali Linux 虚拟机 首先进入kali的官网https://www.kali.org/downloads/,因为是新手,因此建议 ...
- 博科Brocade 300光纤交换机配置zone教程
光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法. 博科300实物图: 环境描述: 如上图,四台服务器通过各自的双HBA卡连接至两台博科300光 ...
- PHP.49-TP框架商城应用实例-前台1-公共布局、制作首页
公共布局包括 1.页头.页脚{layout} 正文:{__COMMENT__} 导入:<layout name="layout"> 2.商品导航{nav.html} = ...
- 20145226夏艺华 《Java程序设计》第1周学习总结
http://www.cnblogs.com/bestixyh/p/5779286.html 去年暑假写的,确实比较丑陋,保留下来也是为了激励自己作出更多改变.寒假写的每一篇博客都尽最大努力养成了良好 ...
- 北京Uber优步司机奖励政策(12月25日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- hdu2066一个人的旅行(floyd优化)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...