使用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是一个强大.开源.轻量的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数 ...
随机推荐
- day 15 装饰器
装饰器(重点,难点) 开闭原则: 对功能的扩展开放 对代码的修改是封闭的 在目标函数前和后插入一段新的代码.不改变原来的代码 通用装饰器写法: # 存在的 ...
- JS中数组方法的封装之slice
slice方法的功能 // 1) : 数组的截取 // 2) :slice(m,n): 从数组索引m开始,截取到索引n,但是不包含n;[前包后不包] // slice(m) : 从索引m开始,截取到末 ...
- 【blockly教程】第二章 Blockly编程基础
2.1 Blockly的数据类型 2.1.1 数据的含义 在计算机程序的世界里,程序的基本任务就是处理数据,无论是数值还是文字.图像.图形.声音.视频等信息,如果要在计算机中处理的话,就必须将它们转 ...
- css dropdown menu
<ul> <li class="left">abc</li> <li class="middle" id=" ...
- Git使用规范(三)
今天我们来介绍一下Git的一些操作,这个里面主要是一些我们平时遇到的一些问题 1.当我进入了一个分支的是时候,我在查看git log的时候,为什么会有别人的信息,我一直以为 这个是查看分支提交情况, ...
- MyBatis-MBG(MyBatis Generator)
1.添加jar包 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>m ...
- ThinkDev.Data更新日志
2013-09-29 10:001.重构Where.And.Or.Having.JoinTable代码,新增条件组合查询QueryGroup2.1.1.2.0 2013-09-04 09:001.修复 ...
- uvaoj1586Molar mass(暴力)
An organic compound is any member of a large class of chemicalcompounds whose molecules contain carb ...
- OSG-简单模型控制
本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...
- MySQL☞自连接
自连接:一张表中根据自身列之间的关联关系,自己跟自己链接. A.创建一个user表,且插入数据,数据如下: B.分析: 把user表看成两张表,一张员工表,一张领导表,发现员工表中lead(领导编号) ...