Quartz.net任务调度
一、Quartz.net简介
Quartz.net是一个开源的任务调度框架,很多定时任务、调度任务都可以用这个框架,如定时日志等。
二、Quartz.net用途
- 定时给女朋友发送消息
- 女朋友生日的时候定时提醒
- 购物定时打折任务
三、Quartz.net实例
- 安装
Quartz.net的安装通过 NuGet包管理 安装,打开 NuGet包管理,搜索Quartz.net,点击安装。

也可以在nuget控制台输入:Install-Package Quartz实现安装。
- 实现
继承IJob接口,实现Execute方法,以下是一个简单的定时写日志的实现
public class WriteLogJob : IJob
{
/// <summary>
/// 实现接口
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public Task Execute(IJobExecutionContext context)
{
Task task = null;
try
{
string fileName = "quartzLog.txt";
using (StreamWriter writer = new StreamWriter(fileName, true))
{
task = writer.WriteAsync($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\r\n");
}
}
catch (Exception)
{ } return task;
}
}
- 配置和自定义管理IScheduler
public class QuartzHelper
{
static readonly IScheduler scheduler;
static QuartzHelper()
{
try
{
var properties = new NameValueCollection();
//1.设置线程池
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
//2.设置线程池最大数量
properties["quartz.threadPool.threadCount"] = "";
//3.设置作业中每个线程的优先级
properties["quartz.threadPool.threadPriority"] = System.Threading.ThreadPriority.Normal.ToString();
//4.远程输出配置
properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
properties["quartz.scheduler.exporter.port"] = "";
properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";
properties["quartz.scheduler.exporter.channelType"] = "tcp"; //properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
////设置线程池的最大线程数量
//properties["quartz.threadPool.threadCount"] = "5";
////设置作业中每个线程的优先级
//properties["quartz.threadPool.threadPriority"] = System.Threading.ThreadPriority.Normal.ToString(); //// 远程输出配置
//properties["quartz.scheduler.exporter.type"] = "Quartz.Simpl.RemotingSchedulerExporter, Quartz";
//properties["quartz.scheduler.exporter.port"] = "555"; //配置端口号
//properties["quartz.scheduler.exporter.bindName"] = "QuartzScheduler";
//properties["quartz.scheduler.exporter.channelType"] = "tcp"; //协议类型 //5.创建一个工程
var schedulerFactory = new StdSchedulerFactory(properties);
//6.启动
scheduler = schedulerFactory.GetScheduler().Result;
//7. 一、开启调度
scheduler.Start(); }
catch (Exception ex)
{ }
}
/// <summary>
/// 时间间隔执行任务
/// </summary>
/// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
/// <param name="seconds">时间间隔(单位:秒)</param>
public static async Task<bool> ExecuteInterval<T>(int seconds) where T : IJob
{
try
{
//2、创建工作任务
IJobDetail job = JobBuilder.Create<T>().Build();
// 3、创建触发器
ITrigger trigger = TriggerBuilder.Create().StartNow().
WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds)
//x.WithIntervalInMinutes(1)
.RepeatForever())
.Build();
//4、将任务加入到任务池
await scheduler.ScheduleJob(job, trigger);
return true;
}
catch (Exception ex)
{ return false;
}
} /// <summary>
/// 指定时间执行任务
/// </summary>
/// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
/// <param name="cronExpression">cron表达式,即指定时间点的表达式</param>
public static async Task<bool> ExecuteByCron<T>(string cronExpression) where T : IJob
{
try
{
//2、创建工作任务
IJobDetail job = JobBuilder.Create<T>().Build();
//3、创建触发器
ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
.StartNow()
.WithCronSchedule(cronExpression)
.Build();
//4、将任务加入到任务池
await scheduler.ScheduleJob(job, trigger);
return true;
}
catch (Exception ex)
{ return false;
}
}
}
- 采用时间表达式来定时执行
string cronExpression = "0/5 0/1 11 * * ? "; //=>11点没五秒执行一次调度任务 QuartzHelper.ExecuteByCron<WriteLogJob>(cronExpression).Wait();
- 定时执行
QuartzHelper.ExecuteInterval<WriteLogJob>().Wait();
以上便是Quartz简单使用方法。
Quartz.net任务调度的更多相关文章
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- Quartz实现任务调度
一.任务调度概述 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作,任务调度涉及多线程并发. ...
- quartz.net任务调度:源码及使用文档
目录: 1.quartz.net任务调度:源码及使用文档 2.quartz.net插件类库封装 前言 前段时间把自己封装quartz.net 类库的过程总结到博客园,有网友想要看一下源码,所以就把源码 ...
- 项目ITP(五) spring4.0 整合 Quartz 实现任务调度
前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用.然后需要的是 上课前20分钟 ,幸好在帮带我的学长做 p2p 的时候,接触过.自然 quartz 是首选.所以我就配置了 ...
- 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出
1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法 Shiro框架内部整合好缓存管理器, ...
- Java&Quartz实现任务调度
目录 Java&Quartz实现任务调度 1.Quartz的作用 2.预备 3.Quartz核心 3.1.Job接口 3.2.JobDetail类 3.3 JobExecutionContex ...
- Quartz.Net任务调度框架
Quartz.Net是一个开源的任务调度框架,非常强大,能够通过简单的配置帮助我们定时具体的操作. 相对于我们用的线程里面while(true)然后sleep来执行某个操作,应该算的上是高端,大气,上 ...
- Spring 中使用Quartz实现任务调度
前言:Spring中使用Quartz 有两种方式,一种是继承特定的基类:org.springframework.scheduling.quartz.QuartzJobBean,另一种则不需要,(推荐使 ...
- ASP.NET MVC5 实现基于Quartz.NET任务调度
工作之余.技术?.记是不可能记住的. 只有写点东西 才能维持得了生活这样子的.好早就像写一篇关于任务调度的文章.终究是太懒了 一.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的 ...
- 浅谈Quartz定时任务调度
一 开发概述 对于具有一定规模的大多数企业来说,存在着这样一种需求:存在某个或某些任务,需要系统定期,自动地执行,然而,对大多数企业来说,该技术的实现,却是他们面临的一大难点和挑战. 对于大部分企 ...
随机推荐
- python中13个实用的文件操作
1. 判断指定目录是否存在: os.path.exists(input_folder) 2. 判断指定目录是不是文件夹 os.path.isdir(input_folder) 3. 判断指定目录是不是 ...
- 树莓派4B到货开箱体验
树莓派4B到货开箱体验 实不相瞒,喜欢这块板已经很久了,但是国内4GB内存的版本始终没货,.....等等等,终于到货了,迅雷不及眼耳之势赶紧下单...购买点亮开发板所需要的物件 顺便看到一个好看的外壳 ...
- 后端返回null,前端怎么处理?数据容错——不用过分相信外部数据
场景 我们在开发过程当中,总是会遇到因为数据原因,导致使用数组方法或者获取对象属性的时候报错. xxx is not fuction Cannot read property xxxx of unde ...
- 前端基础之BOM和DOM操作
目录 BOM和DOM定义 windows对象 windows的子对象 navigator对象 screen对象 history对象 location对象 弹出框 警告框 确认框 提示框 计时相关 se ...
- jQuery—自定义HTTP请求
Ajax设置自定义请求头的两种方法 $.ajax({ url: 'http://www.baidu.com', type: 'get', data: JSON.stringify({"nam ...
- [Linux] centos6.5升级安装的supervisor
因为我要用它来管理多个PHP进程去执行任务,在默认版本下的配置多个子进程不起作用 默认版本的supervisor版本比较低2.1.9,对于运行多个子进程貌似有问题,最新版的supervisor4.1的 ...
- [MySQL] docker下安装使用mysql配置主从复制
拉取mysql的镜像docker search mysqldocker pull mysql 通过镜像创建容器,这里先创建第一个容器作为master mysql-v /etc/mysql:/etc/m ...
- RedisTemplate操作Redis(spring-data-redis)
参看博客:https://www.cnblogs.com/songanwei/p/9274348.html 使用文档:StringRedisTemplate+RedisTemplate使用说明
- 如何调用.so动态库中的函数,如何把自己的函数导出为.so的动态库函数供别人调用
调用.so中的函数和平常的函数没有区别,只是在编译连接时加上-lxxxx就行了.要生成.so库,则编译时用下面的语句:gcc -shared -Wl,-soname,libmyfun.so -o li ...
- [转] 从零推导支持向量机 (SVM)
原文连接 - https://zhuanlan.zhihu.com/p/31652569 摘要 支持向量机 (SVM) 是一个非常经典且高效的分类模型.但是,支持向量机中涉及许多复杂的数学推导,并需要 ...