该文章是系列文章 基于.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继承自ISchedulerFactoryStdSchedulerFactory获取配置的顺序是先从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实现定时作业的更多相关文章

  1. Spring3整合Quartz实现定时作业

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  2. 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业

    demo地址:ABP.WindowsService 该系列文章启发自 How to: Create a Windows Service that schedules jobs, logs and is ...

  3. 用abp vNext快速开发Quartz.NET定时任务管理界面

    今天这篇文章我将通过实例代码带着大家一步一步通过abp vNext这个asp.net core的快速开发框架来进行Quartz.net定时任务调度的管理界面的开发.大伙最好跟着一起敲一下代码,当然源码 ...

  4. SpringBoot2.x集成Quartz实现定时任务管理(持久化到数据库)

    1. Quartz简介   Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目.   Quartz是一个完全由Java编写的开源作业调度框架,为在Java应 ...

  5. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  6. sqlSQL2008如何创建定时作业

    SQL2008如何创建定时作业?此方法也适应于Sql Server2005数据库,有兴趣的可以来看下! 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中 ...

  7. sqlSQL2008如何创建定时作业(代理服务)(转)

    SQL2008如何创建定时作业?此方法也适应于Sql Server2005数据库,有兴趣的可以来看下! 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中 ...

  8. SQL Server 2008 定时作业的制定(SQL2005参考此方法) 转

    --  Author : htl258(Tony)--  Date   : 2010-04-29 19:07:45--  Version:Microsoft SQL Server 2008 (RTM) ...

  9. 实习笔记-1:sql 2008r2 如何创建定时作业

    在公司实习了近一个月,学了很多东西.这一篇是一些比较基础的东西,本人是小菜鸟,不喜欢大神来喷.大神欢迎出门点右上角.谢谢~ 说大实话,对于数据库,我在还没出来实习的时候就是只懂写一些sql语句以及知道 ...

随机推荐

  1. http://www.ybtsoft.com/

    http://www.ybtsoft.com/ 可视化作流建模 http://www.ybtsoft.com/t3/bpm/ 慧都控件网 写一本关于互联网商业变现的书

  2. Java泛型的主要用途

    1.泛型的主要用途就是代替各种类型,作为一个笼统的整体类型代替,也就是代替参数,不论是传入参数还是返回参数.都可以用泛型来代替. 如dao操作类的增删改查操作,因为传入参数的类型不同,但基本都是相同接 ...

  3. java 定时备份数据库

    原文:http://www.open-open.com/code/view/1447490829678 /** 操作数据库 */ public class BackupDb { public Stri ...

  4. Meteor表单

    在本教程中,我们将告诉你如何使用 Meteor 的表单. 文本输入 首先,我们将创建一个 form 元素中文本输入字段和提交按钮. meteorApp/import/ui/meteorApp.html ...

  5. python绘图入门

    python绘图入门 学习了:https://zhuanlan.zhihu.com/p/34200452 API:https://matplotlib.org/api/pyplot_api.html ...

  6. 关于rman duplicate 一些比較重要的知识点--系列三

    FYI: http://docs.oracle.com/cd/E11882_01/backup.112/e10643/rcmsynta020.htm#RCMRF126 rman duplicate d ...

  7. Linux VPS/server上用Crontab来实现VPS自己主动化

    VPS或者server上常常会须要VPS或者server上常常会须要定时备份数据.定时运行重新启动某个服务或定时运行某个程序等等,一般在Linux使用Crontab,Windows以下是用计划任务(W ...

  8. ZOJ 3632 Watermelon Full of Water (线段树 区间更新 + dp)

    题目大意: 让每天都能吃到西瓜. 最少须要花多少钱. 思路分析: dp[pos] 就表示  要让 前i天每天都有西瓜吃.最少须要花多少钱. 那么假设你买这个西瓜的话. 那么这个西瓜能吃的持续时间都要更 ...

  9. 读书笔记-HBase in Action-第二部分Advanced concepts-(3)非Javaclient

    HBase Shell HBase shell使用起来最方便,进入HBase shell控制台就可以使用. $ $HBASE_HOME/bin/hbase shell 常见操作有create(创建表) ...

  10. hdu 3183 A Magic Lamp 贪心

    #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm& ...