asp.net core mvc 使用quartz
参照了: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的更多相关文章
- ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- ASP.NET Core MVC 配置全局路由前缀
前言 大家好,今天给大家介绍一个 ASP.NET Core MVC 的一个新特性,给全局路由添加统一前缀.严格说其实不算是新特性,不过是Core MVC特有的. 应用背景 不知道大家在做 Web Ap ...
- ASP.NET Core MVC 中的 [Controller] 和 [NonController]
前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...
- 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 ...
- 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 ...
- ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览
原文:Overview of ASP.NET Core MVC 作者:Steve Smith 翻译:张海龙(jiechen) 校对:高嵩 ASP.NET Core MVC 是使用模型-视图-控制器(M ...
- ASP.NET Core MVC TagHelper实践HighchartsNET快速图表控件-开源
ASP.NET Core MVC TagHelper最佳实践HighchartsNET快速图表控件支持ASP.NET Core. 曾经在WebForms上写过 HighchartsNET快速图表控件- ...
- ASP.NET Core MVC 在linux上的创建及发布
前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲 ...
- ASP.NET Core - ASP.NET Core MVC 的功能划分
概述 大型 Web 应用比小型 Web 应用需要更好的组织.在大型应用中,ASP.NET MVC(和 Core MVC)所用的默认组织结构开始成为你的负累.你可以使用两种简单的技术来更新组织方法并及时 ...
- 解决ASP.NET Core Mvc文件上传限制问题
一.简介 在ASP.NET Core MVC中,文件上传的最大上传文件默认为20MB,如果我们想上传一些比较大的文件,就不知道怎么去设置了,没有了Web.Config我们应该如何下手呢? 二.设置上传 ...
随机推荐
- 力扣28(java)-实现 strStr()(简单)
题目: 实现 strStr() 函数. 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始).如果不存 ...
- 比心云平台基于阿里云容器服务 ACK 的弹性架构实践
简介:本文主要探讨比心云平台如何利用阿里云容器服务 ACK,来构建应用弹性架构,进一步优化计算成本. 作者:韩韬|比心技术 前言 应用容器化改造后,不可避免地会面临这样一个问题:Kubernetes ...
- [Go] 选择 Beego 的三个理由
1. 项目支持角度较其它框架考虑的多一些,比如:目录结构的简单约定,内置项目配置读取,内置bee脚手架,热重载特性 等. (实际这些 feature 都可以找到 golang 专精的组件引入起来,效果 ...
- 使用Kafka Assistant监控Kafka关键指标
使用Kafka Assistant监控Kafka关键指标 使用Kafka时,我们比较关心下面这些常见指标. Kafka Assistant下载地址:http://www.redisant.cn/ka ...
- CF633H (线段树维护矩乘 + 莫队)
Fibonacci-ish II 题意:给定一个长度最大为 \(30000\) 的序列,和最多 \(30000\) 个询问,每个询问问某区间 \([L,R]\) 里的数,去掉重复然后排序之后,依次乘上 ...
- 【HarmonyOS】安装DevEco Studio后检查环境出现ohpm not set up
按照官网的操作方式,下载完ohpm总是检测不到 打开cmd,发现我之前因为其他项目改过编码 输入 regedit 打开注册表编辑页 按路径[计算机\HKEY_LOCAL_MACHINE\SOFTWAR ...
- 羽夏闲谈——TeeWorlds 中文问题
不久前 削微寒 园友发布了一篇博文 误入 GitHub 游戏区,意外地收获颇丰 ,看到了一个游戏 TeeWorlds .有一说一挺好玩的,下面是那个博客的原图: 官方的下载连接:https:/ ...
- git安装和git命令:全局设置用户名邮箱配置
在网上下载并安装git:https://git-scm.com/downloads在开始菜单里面找到 "Git --> Git Bash",如下 运行Git Bash: 如果 ...
- neo4j的安装部署
Linux下载neo4j 直接在服务器上使用命令下载: curl -O http://dist.neo4j.org/neo4j-community-3.4.5-unix.tar.gz 安装Neo4j ...
- 防止XSS(跨站脚本攻击)漏洞
点击查看代码 - 输入验证和过滤:对于用户输入的数据,进行严格的验证和过滤.可以使用正则表达式或其他验证方式,确保输入的数据符合预期的格式和内容.同时,对于特殊字符进行转义处理,防止恶意代码的注入. ...