使用Quartz实现定时作业
该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇。
Quartz是一个开源的作业调度框架,准确的称谓应该是 Quartz.Net
,它是Java开源项目Quartz Scheduler的一部分。
关于Quartz的功能可访问 https://www.quartz-scheduler.net/features.html
nuget地址:https://www.nuget.org/packages/Quartz/3.0.7/
GitHub地址:https://github.com/quartznet/quartznet
首先是对定义的MyJobService进行完善。
using System.Threading.Tasks;
namespace Demo.MyJob
{
public class MyJobService
{
public async Task StartAsync()
{
//操作逻辑
}
public async Task StopAsync()
{
//操作逻辑
}
public async Task ContinueAsync()
{
//操作逻辑
}
public async Task PauseAsync()
{
//操作逻辑
}
}
}
完善之后的代码如下
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;
namespace Demo.MyJob
{
public class MyJobService
{
private readonly Task<IScheduler> _defaultScheduler;
private static IScheduler _scheduler;
public MyJobService()
{
_defaultScheduler = StdSchedulerFactory.GetDefaultScheduler();
}
public async Task StartAsync()
{
_scheduler = await _defaultScheduler;
await _scheduler.Start();
}
public async Task StopAsync()
{
await _scheduler.Shutdown();
}
public async Task ContinueAsync()
{
await _scheduler.ResumeAll();
}
public async Task PauseAsync()
{
await _scheduler.PauseAll();
}
}
}
IScheduler
是主要的接口,它由ISchedulerFactory
生成,StdSchedulerFactory
继承自ISchedulerFactory
。StdSchedulerFactory
获取配置的顺序是先从App.config查找quartz section,没找到就查找文件名为quartz.config
的配置,如果再没有,代码内置的有默认的配置项。
使用XML文件配置
quartz.config
的简略配置如下
quartz.scheduler.instanceName = QuartzTest
quartz.threadPool.threadCount = 10
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
- quartz.scheduler.instanceName - 此调度程序的名称将为“QuartzTest”,如果没配置,默认名称是“QuartzScheduler”
- quartz.threadPool.threadCount - 最多可同时运行10个作业,如果现在有超过10个job需要执行的话,不会报错,但是将有job不能执行。
- quartz.plugin.xml.type和quartz.plugin.xml.fileNames需要新加nuget包
Quartz.Plugins
,指定了配置job详情的xml文件,该文件与quartz.config
在同级目录下。
注意:新增了三个文件,分别是job_scheduling_data_2_0.xsd、quartz.config、quartz_jobs.xml,文件属性为如果较新则复制
。
quartz_jobs.xml示例
<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
</processing-directives>
<schedule>
<job>
<name>SayHelloJob</name>
<group>SayHelloJobGroup</group>
<description>SayHello</description>
<job-type>Demo.MyJob.Jobs.SayHelloJob,Demo.MyJob</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>SayHelloJobTrigger</name>
<group>SayHelloJobGroup</group>
<description>SayHello</description>
<job-name>SayHelloJob</job-name>
<job-group>SayHelloJobGroup</job-group>
<start-time>2019-06-13T00:00:00+08:00</start-time>
<cron-expression>0 30 1 * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
job-type标识加载SayHelloJob的名称,要指定正确不然报错。更多配置可以参考:Quartz.Tests.Integration/Xml/TestData
实现Job
详细文档地址:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/index.html
IScheduler.Start(System.Threading.CancellationToken)
调用之后将启动实现的Job,该Job必须继承IJob
,执行的操作放在实现的Execute
方法中,该方法标识了Task,也就是说我们可以在Execute
方法内调用同步方法或者异步方法。
using System;
using System.Threading.Tasks;
using Quartz;
namespace Demo.MyJob.Jobs
{
class SayHelloJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Task.Run(() =>
{
Console.WriteLine("Hello World to Async!");
});
Console.WriteLine("Hello World!");
}
}
}
使用Quartz实现定时作业的更多相关文章
- Spring3整合Quartz实现定时作业
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...
- 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业
demo地址:ABP.WindowsService 该系列文章启发自 How to: Create a Windows Service that schedules jobs, logs and is ...
- 用abp vNext快速开发Quartz.NET定时任务管理界面
今天这篇文章我将通过实例代码带着大家一步一步通过abp vNext这个asp.net core的快速开发框架来进行Quartz.net定时任务调度的管理界面的开发.大伙最好跟着一起敲一下代码,当然源码 ...
- SpringBoot2.x集成Quartz实现定时任务管理(持久化到数据库)
1. Quartz简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目. Quartz是一个完全由Java编写的开源作业调度框架,为在Java应 ...
- SQLServer2005创建定时作业任务
SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...
- sqlSQL2008如何创建定时作业
SQL2008如何创建定时作业?此方法也适应于Sql Server2005数据库,有兴趣的可以来看下! 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中 ...
- sqlSQL2008如何创建定时作业(代理服务)(转)
SQL2008如何创建定时作业?此方法也适应于Sql Server2005数据库,有兴趣的可以来看下! 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中 ...
- SQL Server 2008 定时作业的制定(SQL2005参考此方法) 转
-- Author : htl258(Tony)-- Date : 2010-04-29 19:07:45-- Version:Microsoft SQL Server 2008 (RTM) ...
- 实习笔记-1:sql 2008r2 如何创建定时作业
在公司实习了近一个月,学了很多东西.这一篇是一些比较基础的东西,本人是小菜鸟,不喜欢大神来喷.大神欢迎出门点右上角.谢谢~ 说大实话,对于数据库,我在还没出来实习的时候就是只懂写一些sql语句以及知道 ...
随机推荐
- Java中的字符
以下内容引用自http://wiki.jikexueyuan.com/project/java/characters.html: 一般情况下,当处理字符时,使用的是原始数据类型char. 示例: ch ...
- 【SQL Server 学习系列】-- ConnectionTimeout、CommandTimeout和BulkCopyTimeout
1. SqlConnection.ConnectionTimeout获取在尝试建立连接时终止尝试并生成错误之前所等待的时间.单位:秒默认值:15秒设置为0时,表示无限制 2. SqlCommand.C ...
- Java实现拖拽上传
原文:http://www.open-open.com/code/view/1437358795584 在项目开发中由于实际需求,需要开发拖拽上传的功能,ok! 先看效果图: jsp上传前端代码: & ...
- IOS开发 Block的学习
苹果公司正在大力推广Block块语法的使用,据说Block会迟早取代一般协议代理的使用. Block最大的作用是函数回调,简化代码. 在ios中,将blocks当成对象来处理,它封装了一段代码,这段代 ...
- 【Arcgis Server】程序动态发布MXD到Arcgis Server
http://dkay.blogbus.com/logs/47727282.html protected void Button14_Click(object sender, EventArgs e) ...
- soapUI系列之—-05 JDBC Request & Xpath Match
一.配置JDBC Connection String 1. 以Oracle为例,要使用JDBC数据库就要先下一个 oracle JDBC的驱动,下载成功后把它放到soapUI安装目录下的 bin/e ...
- AIDL/IPC Android AIDL/IPC 进程通信机制——超具体解说及使用方法案例剖析(播放器)
首先引申下AIDL.什么是AIDL呢?IPC? ------ Designing a Remote Interface Using AIDL 通常情况下,我们在同一进程内会使用Binder.Broad ...
- 多媒体开发之wis-stream
在live555的mediaServer中,已经实现RTSP-over-HTTP,但默认没有开启.如果要实现这个功能,需要调用RTSPServer::setUpTunnelingOverHTTP(), ...
- 嵌入式驱动开发之--- 虚拟磁盘SBULL块设备驱动程序分析
#define SBULL_MINORS 16 /* 每个sbull设备所支持的次设备号的数量 */ #define KERNEL_SECTOR_SIZE 512 // 本地定 ...
- OpenGL的版本号历史和发展
来源请注明.本文永久地址为http://www.cnblogs.com/vertexshader/articles/2917540.html OpenGL®作为业界最为广泛使用的2D和3D图形接口标准 ...