在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同时执行多个任务的更多相关文章

  1. quartz 两次执行问题

    最近发现网站(xiayule.net)越写越大,有些东西已经难以维护了,想要添加个功能,都得斟酌半天 项目中有很多可重构的地方,小重构一直进行,大的不敢动,毕竟没有很多时间做测试. 最后,决定精简代码 ...

  2. 使用Quartz.net来执行定时任务

    Quartz.net使用方法:http://www.cnblogs.com/lizichao1991/p/5707604.html 最近,项目中需要执行一个计划任务,组长就让我了解一下Quartz.n ...

  3. 用Quartz处理定时执行的任务

    这次做的项目中,有一部分功能需要实现定时执行.呃,这样说可能有点笼统,打个比方吧.例如用户在登录的时候,连续输错3次密码后,系统会将该用户冻结,不再允许该用户登录系统,等到了晚上零晨时分,再为所有被冻 ...

  4. spring学习笔记--quartz和定时任务执行

    前言: 最近要写一个定时任务, 用于同步数据. 以往这种涉及数据库操作的定时脚本, 都会采用python+crontab的方式来实现. 这次画风大转, 决定试试用spring+quartz来实现一下. ...

  5. java定时任务以及Spring使用Quartz调度器执行定时任务

    java下的java.util.Timer中类可以实现定时执行任务的执行: 如:让任务立即执行,每隔1s循环执行一次 public class TimerClass { public static v ...

  6. Spring的quartz定时器重复执行二次的问题解决

    Spring的quartz定时器同一时刻重复执行二次的问题解决 最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的ha ...

  7. Tomcat集群Spring+Quartz多次执行解决方案记录

    由于在集群环境下定时器会出现并发和重复执行的问题,我再三考虑记录有5 一.把定时器模块单独拿出来放到一台tomcat或者新建一个Java工程手动启动定时器,这样定时器的任务就可以从原来的集群中抽离开来 ...

  8. quartz定时定时任务执行两次

    quartz框架没问题. 流程: sping-quartz配置 <?xml version="1.0" encoding="UTF-8"?> < ...

  9. .NET Core使用Quartz执行调度任务进阶

    一.前言运用场景 Quartz.Net是一个强大.开源.轻量的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数 ...

随机推荐

  1. tp js结合时间戳

    $(document).ready(function(){ $.extend({ show:function(){ } }); setInterval("show()",1000) ...

  2. MapReduce之Reduce Join

    一 介绍 Reduce Join其主要思想如下: 在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag), 比如:t ...

  3. ZYNQ的Linux Linaro系统镜像制作SD卡启动

    ZYNQ的Linux Linaro系统镜像制作SD卡启动 0. 概述 ZYNQ生成uboot的时候和正常的ARM设备不太一样,ZYNQ属于二次辅助启动uboot然后由uboot启动内核,大概意思就是 ...

  4. 20190118-利用Python实现Pig Latin游戏

    1.利用Python实现Pig Latin字母游戏 “Pig Latin”是一个英语儿童文字改写游戏,整个游戏遵从下述规则:a. 元音字母是‘a’.‘e’.‘i’.‘o’.‘u’.字母‘y’在不是第一 ...

  5. python应用:selenium之爬取天眼查信息

    inform_table.py # -*-coding:utf8-*- from selenium import webdriver from selenium.webdriver.common.pr ...

  6. 『Python基础-15』递归函数 Recursion Function

    什么是递归函数 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的.用递归过程定义的函数,称为递归函数,例如连加.连乘及阶乘等.凡是递归的函数,都是可计算的,即能行的. 递归就是一个 ...

  7. Python学习:4.运算符以及数据类型解析

    运算符 一.算数运算: 二.比较运算: 三.赋值运算 四.逻辑运算 五.成员运算 基本数据类型 一.Number(数字) Python3中支持int.float.bool.complex. 使用内置的 ...

  8. python教程(二)·数据类型

    数据类型,顾名思义就是数据的类型,数据到底有哪些类型呢?在python中,最基本的数据类型有好几种,让我来逐个介绍. 整数类型(int) python中只有一种整数类型,就是int类型,在程序中的写法 ...

  9. st link 连接问题ST LINK is not in the DFU mode plesse restart it

    原因:插上st link后做了一些操作才点击升级.如点击了连接stlink,如下图等: 解决办法: 1. 拔掉stlink 2. 插上stlink 3. 不要点其他的,直接点击ST-LINK-> ...

  10. 【LG1393】动态逆序对

    [LG1393]动态逆序对 题面 洛谷 题解 \(CDQ\)分治,按照时间来分治 应为一个删除不能对前面的操作贡献,所以考虑一个删除操作对它后面时间的操作的贡献 用上一个答案减去次贡献即可 代码 #i ...