使用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是一个强大.开源.轻量的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数 ...
随机推荐
- STM32(10)——窗口看门狗
简介: 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障.除非递减计数器的值在 T6 位 (WWDG->CR 的第六位)变成 0 ...
- 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别
[面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...
- java 用接口计算圆柱的体积和面积并添加颜色
import java.util.Scanner; class Test { public static void main(String[] args) { fangfa i = new fangf ...
- LeetCode初级算法的Python实现--动态规划
动态规划的本质是递归:所以做题之前一定要会递归:递归式就是状态转移方程:这里将会介绍使用动态规划做题的思维方式. 统一的做题步骤: 1.用递归的方式写出代码:(此方法写的代码在leetcode中一定会 ...
- 成都Uber优步司机奖励政策(3月31日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 佛山Uber优步司机奖励政策(12月21日到12月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- GDAL2.1.1库在Ubuntu14.04下编译时遇到的问题处理方法
不用作任何调整,直接在Linux下编译GDAL2.1.1源码的步骤是: $ ./configure $ make $ make install 非常简单,这样也能正常生成gdal动态库.静态库,如果想 ...
- CentOS6.5进不去系统,修复
今天进系统出现问题了,然后在网上搜索了一下解决方案解决了,把解决方法记录下来,方便以后查阅. 输入root密码 #mount | grep "on /" //得到root用户所在分 ...
- Selenium(Python)驱动Firefox浏览器
我的版本是Firefox Setup 52.7.0.exe+geckodriver-v0.15.0-win64.zip, 把驱动geckodriver.exe放到Python安装目录下, 也可以指定驱 ...
- C do whlie 数数位
#include <stdio.h> int main(int argc, char **argv) { //定义两个变量 x 跟 n,n的初始化为0: int x; int n ...