在应用程序开发过程中,经常会需要定时任务调度功能,本篇博客介绍Asp.net Core如何使用Quartz完成定时调度

一、Quartz使用步骤

  1. 创建调度器scheduler,并开启
  2. 创建Job作业
  3. 创建tigger触发器
  4. 把作业和触发器放入调度器中

二、Quartz的API

  • IScheduler - 与 scheduler 进行交互的主要接口
  • IJob - 你希望被 scheduler 执行的组件的接口
  • IJobDetail - 用于定义 Jobs 实例
  • ITrigger - 定义将会在scheduler上执行的 job 上的组件
  • JobBuilder - 用于定义或建立(define/build) JobDetail 实例,JobDetail定义了Jobs实例
  • TriggerBuilder - 用于定义或建立 Trigger 实例

三、使用Quartz

1、在使用Quartz之前需添加引用,在程序包管理控制台中执行命令安装依赖包

Install-Package Quartz -Version 3.0.7

2、创建调度类QuartzPro

using Quartz;
using Quartz.Impl;
using System.Collections.Specialized;
using System.Threading.Tasks; namespace Test123
{
public class QuartzPro
{
private IScheduler scheduler;
// 创建调度任务的入口
public async Task Start()
{
await StartJob();
}
// 创建调度任务的公共调用中心
public async Task StartJob()
{
//创建一个工厂
NameValueCollection param = new NameValueCollection()
{
{ "testJob","test"}
};
//创建一个调度器
StdSchedulerFactory factory = new StdSchedulerFactory(param);
scheduler = await factory.GetScheduler();
//开始调度器
await scheduler.Start();
//每三秒打印一个info日志
await CreateJob<StartLogInfoJob>("_StartLogInfoJob", "StartLogInfoJob", " 0/3 * * * * ? ");
//调度时间生成地址 http://cron.qqe2.com
}
// 停止调度
public void Stop()
{
scheduler.Shutdown();
scheduler = null;
}
// 创建运行的调度器
public async Task CreateJob<T>(string name, string group, string cronTime) where T : IJob
{
//创建一个作业
var job = JobBuilder.Create<T>()
.WithIdentity("name" + name, "group" + group)
.Build();
//创建一个触发器
var tigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("name" + name, "group" + group)
.StartNow()
.WithCronSchedule(cronTime)
.Build();
//把作业和触发器放入调度器中
await scheduler.ScheduleJob(job, tigger);
}
}
}

3、创建业务逻辑类StartLogInfoJob

using Quartz;
using System.Threading.Tasks; namespace Test123
{
public class StartLogInfoJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
await Start();
}
public async Task Start()
{
LogHelp.LogTxt("调度打印Info");
}
}
}

4、创建打印日志类LogHelp

using System;
using System.IO;
using System.Text; namespace Test123
{
public class LogHelp
{
public static void LogTxt(string info)
{
string FilePath = Environment.CurrentDirectory + "/LogTxt.txt";
StringBuilder msg = new StringBuilder();
msg.Append("*************************************** \r\n");
msg.AppendFormat(" 打印时间: {0} \r\n", DateTime.Now);
msg.AppendFormat(" 打印内容: {0} \r\n", info);
msg.Append("***************************************");
try
{
if (File.Exists(FilePath))
{
using (StreamWriter tw = File.AppendText(FilePath))
{
tw.WriteLine(msg.ToString());
}
}
else
{
TextWriter tw = new StreamWriter(FilePath);
tw.WriteLine(msg.ToString());
tw.Flush();
tw.Close();
tw = null;
}
}
catch (Exception exx)
{
Console.ReadKey();
}
}
}
}

5、重写控制台应用程序的Program文件

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using QuartzText;
using System;
using System.Linq; namespace Test123
{
class Program
{
static void Main(string[] args)
{
HandleStart();
var webHostArgs = args.Where(arg => arg != "--console").ToArray();
var host = WebHost.CreateDefaultBuilder(webHostArgs)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Limits.MinRequestBodyDataRate = null;
})
.Build();
host.Run();
}
static void HandleStart()
{
try
{
new QuartzPro().Start().GetAwaiter().GetResult();
}
catch (Exception ex)
{
throw;
}
}
}
}

日志每隔三秒打印一次

End!

ASP.NET Core使用Quartz定时调度的更多相关文章

  1. Quartz定时调度框架

    Quartz定时调度框架CronTrigger时间配置格式说明 CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年 ...

  2. java 多线程——quartz 定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  3. Asp.net Core使用Quartz.net

    1.介绍:Quartz.Net主要是用来做一些周期性的工作,或者定时工作.比如每天凌晨2点执行某个方法或者调用某个接口. Quartz项目地址:https://github.com/quartz-sc ...

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

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

  5. .NET Core使用Quartz执行调度任务进阶(转)

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

  6. Spring Quartz定时调度任务配置

    applicationContext-quartz.xml定时调度任务启动代码: <?xml version="1.0" encoding="UTF-8" ...

  7. Quartz定时调度jar包的执行Demo分享

    1.Quartz简介 ​ Quartz框架的核心是调度器.调度器负责管理Quartz应用运行时环境.调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件.Quartz不仅仅是线程和线程管理. ...

  8. quartz 定时调度持久化数据库配置文件

    1 下载quartz对应版本jar包 2 初始化对应数据库sql(版本需要对应,不然会出现少字段的情况) ,下载地址  https://github.com/quartz-scheduler/quar ...

  9. Quartz定时调度

    测试类 import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; ...

随机推荐

  1. HBuilder创建app 3

    一.Audio 模块实现开启手机摄像头 基于html5 plus http://www.html5plus.org/doc/zh_cn/audio.html 栗子: <!DOCTYPE html ...

  2. lf 前后端分离 (5) 优惠券

    关于优惠券 优惠券主要通过前端传回来的course_id_list 创建数据结构 首先清空操作,将所有的优惠券清空, 并将所有优惠劵放到redis中的过程 import datetime import ...

  3. 201871010105-曹玉中《面向对象程序设计(java)》第十四周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  4. mysql左连接 右连接 内连接的区别

    mysql左连接 右连接 内连接的区别 1.内连接,显示两个表中有联系的所有数据; 2.左链接,以左表为参照,显示所有数据,右表中没有则以null显示 3.右链接,以右表为参照显示数据,,左表中没有则 ...

  5. MySQL数据库 介绍,安装,基本操作

    - 数据库介绍: 1.随意存放在一个文件中的数据,数据的格式千差万别 tank|123 jason:123 sean~123 2.软件开发目录规范 - Project: - conf - bin - ...

  6. AE cc 2019 下载链接

    [安装环境]:win7/win8/win10 [64位下载] 百度网盘链接: pan.baidu.com/s/1iZcxpyqsRLXD4QNZoHgzPw   提取码:2u4j

  7. Docker简介(一)

    一.为什么会有Docker 环境配置很麻烦,换了台机器,就得全部重新配置一次. 二.Docker的理念 Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship a ...

  8. (translation.E004) You have provided a value for the LANGUAGE_CODE setting that is not in the LANGUAGES setting.

    django3.0开始LANGUAGE_CODE前面必须配相应的LANGUAGES配置如下: from django.utils.translation import gettext_lazy as ...

  9. Ultimate Chicken Horse GameProject需求规格报告书

    团队名称:超级鸡马 成员: 身份 姓名 分工 组长 邱志明  主程序设计 组员 吴钧诚  界面设计 组员 李承哲  陷阱设计 组员 冯英炽  客户,参与测试和需求分析工作 组员 林裕权  素材确定 修 ...

  10. 数据结构——顺序表(sequence list)

    /* sequenceList.c */ /* 顺序表 */ /* 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表中的各项数据元素,用这种存储形式的线性表称为顺序表. */ #in ...