参照了:https://www.cnblogs.com/dangzhensheng/p/10496278.html

1.新建任务类ReportJob.cs,这个类里就是具体任务了。

using Quartz;
using System;
using System.IO;
using System.Threading.Tasks; namespace WebApplication1.MyQuartzJob
{ /// <summary>
/// 具体任务类
/// </summary>
[DisallowConcurrentExecution]
public class ReportJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
return Task.Run(() =>
{
foo();
});
} public void foo()
{
try
{
string root = Directory.GetCurrentDirectory();
string logDir = Path.Combine(root, "Logs");
logDir = Path.Combine(logDir, DateTime.Now.ToString("yyyy-MM"));
var reportDirectory = logDir; if (!Directory.Exists(reportDirectory))
{
Directory.CreateDirectory(reportDirectory);
}
var dailyReportFullPath = Path.Combine(reportDirectory, DateTime.Now.ToString("yyyy-MM-dd")+".txt");
var logContent = string.Format("{0}==>>{1}{2}", DateTime.Now, "create new log.", Environment.NewLine);
File.AppendAllText(dailyReportFullPath, logContent); }
catch (Exception ex)
{
//日志
}
}
}
}

foo() 方法就是想要做的任务。

2.新建QuartzFactory类,这个类复制粘贴就行。

using Quartz;
using Quartz.Spi;
using System; namespace WebApplication1.MyQuartzJob
{
/// <summary>
/// 工厂,复制就行
/// </summary>
public class QuartzFactory : IJobFactory
{
private readonly IServiceProvider _serviceProvider; public QuartzFactory(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
} public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
var jobDetail = bundle.JobDetail; var job = (IJob)_serviceProvider.GetService(jobDetail.JobType);
return job;
} public void ReturnJob(IJob job)
{
}
}
}

3.新建QuartzService类,本类用来定时,和对IServiceCollection进行配置。

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Quartz;
using Quartz.Impl;
using Quartz.Spi;
using System;
using System.Collections.Generic;
using System.Linq; namespace WebApplication1.MyQuartzJob
{
/// <summary>
/// 制定任务,配置IServiceCollection
/// </summary>
public static class QuartzService
{
#region 单任务
public static void StartJob<TJob>() where TJob : IJob
{ string thisJob = "ReportJob"; string groupName = "gp" + thisJob;
string jobName = "job" + thisJob;
string triggerName = "trigger" + thisJob; var scheduler = new StdSchedulerFactory().GetScheduler().Result; var job = JobBuilder.Create<TJob>()
.WithIdentity(jobName, groupName)
.Build(); var trigger1 = TriggerBuilder.Create()
.WithIdentity(triggerName, groupName)
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
.ForJob(job)
.Build(); scheduler.AddJob(job, true);
scheduler.ScheduleJob(job, trigger1);
scheduler.Start();
}
#endregion #region 多任务
public static void StartJobs<TJob>() where TJob : IJob
{
var scheduler = new StdSchedulerFactory().GetScheduler().Result; var job = JobBuilder.Create<TJob>()
.WithIdentity("jobs")
.Build(); var trigger1 = TriggerBuilder.Create()
.WithIdentity("job.trigger1")
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(5)).RepeatForever())
.ForJob(job)
.Build(); var trigger2 = TriggerBuilder.Create()
.WithIdentity("job.trigger2")
.StartNow()
.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(11)).RepeatForever())
.ForJob(job)
.Build(); var dictionary = new Dictionary<IJobDetail, IReadOnlyCollection<ITrigger>>
{
{job, new HashSet<ITrigger> {trigger1, trigger2}}
}; scheduler.ScheduleJobs(dictionary, true);
scheduler.Start();
}
#endregion #region 配置
public static void AddQuartz(this IServiceCollection services, params Type[] jobs)
{
services.AddSingleton<IJobFactory, QuartzFactory>();
services.Add(jobs.Select(jobType => new ServiceDescriptor(jobType, jobType, ServiceLifetime.Singleton))); services.AddSingleton(provider =>
{
var schedulerFactory = new StdSchedulerFactory();
var scheduler = schedulerFactory.GetScheduler().Result;
scheduler.JobFactory = provider.GetService<IJobFactory>();
scheduler.Start();
return scheduler;
});
}
#endregion }
}

StartJob 是制定任务,AddQuartz 配置IServiceCollection。

4.在Startup.cs中注册代码

(a) 在public void ConfigureServices(IServiceCollection services) 方法尾部添加一行:services.AddQuartz(typeof(ReportJob));

public void ConfigureServices(IServiceCollection services)
{
// 。。。。 services.AddQuartz(typeof(ReportJob));
}

注意要引用QuartzService类的命名空间。

(b)在 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)  方法尾部添加一行:QuartzService.StartJob<ReportJob>();

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//.... QuartzService.StartJob<ReportJob>();
}

5. F5 运行。

asp.net core mvc 使用quartz的更多相关文章

  1. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  2. ASP.NET Core MVC 配置全局路由前缀

    前言 大家好,今天给大家介绍一个 ASP.NET Core MVC 的一个新特性,给全局路由添加统一前缀.严格说其实不算是新特性,不过是Core MVC特有的. 应用背景 不知道大家在做 Web Ap ...

  3. ASP.NET Core MVC 中的 [Controller] 和 [NonController]

    前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...

  4. ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

    原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...

  5. ASP.NET Core 中文文档 第二章 指南(4.1)ASP.NET Core MVC 与 Visual Studio 入门

    原文:Getting started with ASP.NET Core MVC and Visual Studio 作者:Rick Anderson 翻译:娄宇(Lyrics) 校对:刘怡(Alex ...

  6. ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览

    原文:Overview of ASP.NET Core MVC 作者:Steve Smith 翻译:张海龙(jiechen) 校对:高嵩 ASP.NET Core MVC 是使用模型-视图-控制器(M ...

  7. ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件-开源

    ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core. 曾经在WebForms上写过 HighchartsNET快速图表控件- ...

  8. ASP.NET Core MVC 在linux上的创建及发布

    前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...

  9. ASP.NET Core - ASP.NET Core MVC 的功能划分

    概述 大型 Web 应用比小型 Web 应用需要更好的组织.在大型应用中,ASP.NET MVC(和 Core MVC)所用的默认组织结构开始成为你的负累.你可以使用两种简单的技术来更新组织方法并及时 ...

  10. 解决ASP.NET Core Mvc文件上传限制问题

    一.简介 在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如何下手呢? 二.设置上传 ...

随机推荐

  1. 力扣28(java)-实现 strStr()(简单)

    题目: 实现 strStr() 函数. 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始).如果不存 ...

  2. 比心云平台基于阿里云容器服务 ACK 的弹性架构实践

    ​简介:本文主要探讨比心云平台如何利用阿里云容器服务 ACK,来构建应用弹性架构,进一步优化计算成本. 作者:韩韬|比心技术 前言 应用容器化改造后,不可避免地会面临这样一个问题:Kubernetes ...

  3. [Go] 选择 Beego 的三个理由

    1. 项目支持角度较其它框架考虑的多一些,比如:目录结构的简单约定,内置项目配置读取,内置bee脚手架,热重载特性 等. (实际这些 feature 都可以找到 golang 专精的组件引入起来,效果 ...

  4. 使用Kafka Assistant监控Kafka关键指标

    使用Kafka Assistant监控Kafka关键指标 使用Kafka时,我们比较关心下面这些常见指标. Kafka Assistant下载地址:http://www.redisant.cn/ka ...

  5. CF633H (线段树维护矩乘 + 莫队)

    Fibonacci-ish II 题意:给定一个长度最大为 \(30000\) 的序列,和最多 \(30000\) 个询问,每个询问问某区间 \([L,R]\) 里的数,去掉重复然后排序之后,依次乘上 ...

  6. 【HarmonyOS】安装DevEco Studio后检查环境出现ohpm not set up

    按照官网的操作方式,下载完ohpm总是检测不到 打开cmd,发现我之前因为其他项目改过编码 输入 regedit 打开注册表编辑页 按路径[计算机\HKEY_LOCAL_MACHINE\SOFTWAR ...

  7. 羽夏闲谈——TeeWorlds 中文问题

      不久前 削微寒 园友发布了一篇博文 误入 GitHub 游戏区,意外地收获颇丰 ,看到了一个游戏 TeeWorlds .有一说一挺好玩的,下面是那个博客的原图:   官方的下载连接:https:/ ...

  8. git安装和git命令:全局设置用户名邮箱配置

    在网上下载并安装git:https://git-scm.com/downloads在开始菜单里面找到 "Git --> Git Bash",如下 运行Git Bash: 如果 ...

  9. neo4j的安装部署

    Linux下载neo4j 直接在服务器上使用命令下载: curl -O http://dist.neo4j.org/neo4j-community-3.4.5-unix.tar.gz 安装Neo4j ...

  10. 防止XSS(跨站脚本攻击)漏洞

    点击查看代码 - 输入验证和过滤:对于用户输入的数据,进行严格的验证和过滤.可以使用正则表达式或其他验证方式,确保输入的数据符合预期的格式和内容.同时,对于特殊字符进行转义处理,防止恶意代码的注入. ...