(十).NET6.0 搭建基于Quartz组件的定时调度任务


1.添加Quartz定时器组件

2.新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目。然后新建一个中间调度类,叫QuartzMiddleJob

3.新建一个Job工厂类,叫YsqJobFactory,用来获取刚刚创建的中间调度类的服务

4.新建一个通用执行计划类,叫YsqJobSchedule,用于每次任务都通过该计划进行生成

5.现在添加一个任务,新建任务类 MyJobs,并且继承自IJob,然后在Excute方法里面,就是该任务执行调度时候会进去执行的了

6.将任务注册到Autofac中

7.编写Program类
点击查看代码
var builder = WebApplication.CreateBuilder(args);
#region 向容器中添加服务
// **1. 初始化日志配置(优先执行)**
// 日志需要尽早配置,确保后续的服务、管道启动时能记录日志
AppHelper.Init(builder.Configuration);
builder.Host.UseSerilog((context, services, configuration) =>
{
configuration.ReadFrom.Configuration(context.Configuration);
});
// **2. 注册原生服务(AddXxx 服务)**
// 原生服务注册优先,便于 Autofac 接管时完整保留这些服务
builder.Services.AddControllers(); // 添加控制器支持
builder.Services.AddEndpointsApiExplorer(); // 添加终结点支持
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "API 文档标题",
Version = "1.0",
Description = "这是 API 文档描述"
});
var xmlFile = Path.Combine(AppContext.BaseDirectory, "Ysq.Core.xml");
c.IncludeXmlComments(xmlFile, true);
});
// **3. 配置 Hangfire 服务**
// 必须在 Autofac 配置之前注册,因为其服务会被转移到 Autofac 中
HangfireConfigInfo.ConnectionString = AppHelper.Instance.ReadAppSettings(new[] { "Hangfire", "Config", "ConnectionString" });
HangfireConfigInfo.Db = Convert.ToInt32(AppHelper.Instance.ReadAppSettings(new[] { "Hangfire", "Config", "Db" }));
builder.Services.AddHangfire(config =>
{
config.UseStorage(new RedisStorage(
HangfireConfigInfo.ConnectionString,
new RedisStorageOptions
{
Db = HangfireConfigInfo.Db,
FetchTimeout = TimeSpan.FromMilliseconds(30)
}));
});
builder.Services.AddHangfireServer(); // 注册 Hangfire 后台任务
// **4. 替换 DI 容器为 Autofac**
// 在所有原生服务注册之后执行,便于 Autofac 接管完整的服务注册
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
{
containerBuilder.RegisterModule(new AutofacRegister()); // 在 Autofac 中注册自定义服务
});
// **5. 注册 Hosted Service(Quartz.NET 或其他后台服务)**
// 注册 Quartz.NET 的 HostedService,此时依赖已全部就绪
builder.Services.AddHostedService<YsqJobHostService>();
#endregion
// **6. 构建应用**
var app = builder.Build();
#region 配置HTTP请求管道
// **7. 配置中间件管道**
// 按照 ASP.NET Core 的推荐顺序配置中间件
app.UseSerilogRequestLogging(options =>
{
options.MessageTemplate = "HTTP {RequestMethod} {RequestPath} responded {StatusCode} in {Elapsed:0.0000}ms";
});
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
IgnoreAntiforgeryToken = true,
DashboardTitle = "Hangfire 任务监控面板",
AsyncAuthorization = new[] { new MyHangfireFilter() },
IsReadOnlyFunc = _ => true // 设置面板为只读
});
// 启用 Swagger 文档
app.UseSwagger();
app.UseSwaggerUI();
// **8. 配置终端点映射**
// 必须在中间件管道之后配置终端点
if (!app.Environment.IsDevelopment())
{
builder.WebHost.UseUrls("http://*:35678");//指定监听端口号
}
// 启用授权中间件
app.UseAuthorization();
// **8. 配置终端点映射**
// 必须在中间件管道之后配置终端点
app.MapControllers();
// **9. 配置 Hangfire 的定时任务**
// 必须在应用完全构建并运行时添加定时任务
RecurringJob.AddOrUpdate<IHangfireJobs>("MyFirstJob", x => x.FirstJob(), "0 10 * * *");
app.Run();
#endregion
8.查看demo运行结果(每一秒执行一次的示例)

(十).NET6.0 搭建基于Quartz组件的定时调度任务的更多相关文章
- 十七、.net core(.NET 6)搭建基于Quartz组件的定时调度任务
搭建基于Quartz组件的定时调度任务 先在package包项目下,添加Quartz定时器组件: 新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目.然后新建一个中间调度类,叫Qu ...
- springmvc+quartz简单实现定时调度
一.简介:Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十 ...
- 基于Azkaban的任务定时调度实践
本文由云+社区发表 作者:maxluo 一.Azkaban介绍 Azkaban是LinkedIn开源的任务调度框架,类似于JavaEE中的JBPM和Activiti工作流框架. Azkaban功能和特 ...
- 基于Quartz实现简单的定时发送邮件
一.什么是Quartz Quartz 是一个轻量级任务调度框架,只需要做些简单的配置就可以使用:它可以支持持久化的任务存储,即使是任务中断或服务重启后,仍可以继续运行.Quartz既可以做为独立的应用 ...
- AI识万物:从0搭建和部署手语识别系统 ⛵
作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 计算机视觉实战系列: https://www.showmeai.tech ...
- 定时调度系列之Quartz.Net详解
一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...
- 定时调度篇之Quartz.Net详解(被替换)
一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...
- 定时调度系列之Quartz.Net详解(转)
出处:https://www.cnblogs.com/yaopengfei/p/9216229.html 一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提 ...
- 基于Quartz编写一个可复用的分布式调度任务管理WebUI组件
前提 创业小团队,无论选择任何方案,都优先考虑节省成本.关于分布式定时调度框架,成熟的候选方案有XXL-JOB.Easy Scheduler.Light Task Scheduler和Elastic ...
- 从0到1搭建基于Kafka、Flume和Hive的海量数据分析系统(一)数据收集应用
大数据时代,一大技术特征是对海量数据采集.存储和分析的多组件解决方案.而其中对来自于传感器.APP的SDK和各类互联网应用的原生日志数据的采集存储则是基本中的基本.本系列文章将从0到1,概述一下搭建基 ...
随机推荐
- 枚举(C语言)
1.枚举定义 枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读. 枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性. 定义一个枚 ...
- 聊聊jvm的内存结构, 以及各种结构的作用
什么是JVM 定义:Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 内存结构 JVM 内存布局规定了 Java 在运行过程中内存申请.分配.管理的策 ...
- 使用wxpython开发跨平台桌面应用,对常用消息对话框的封装处理
在很多程序中,封装常用消息对话框有很多好处,尤其是在 GUI 应用程序中,本篇随笔结合.net 开发Winform界面的经验,对使用wxpython开发中 wx.MessageDialog 和 wx. ...
- C++进阶知识汇总
知识来源:https://www.imooc.com/learn/1305 二进制在计算机中的意义: 计算机如何存负整数: 原码:符号位变为1 反码:除符号位其余取反 补码:=反码+1 是-7的表示方 ...
- NZOJ 模拟赛3
T1 地理geo 奶牛们刚学习完地理课,知道地球是个球.他们非常震惊,满脑子都是球形. 他们试图把地球表面看成一个NxN (1 <= N <= 100)的方格,但是顶端连接着底部.左边连接 ...
- vue2-vuex
专门在 Vue 中实现集中式状态(数据)管理的一个 Vue 插件,对 vue 应 用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信 应用场景: 多个组 ...
- java三次大作业的全面总结
一:前言 知识点总结: 数据结构:题目涉及到了字典或哈希表用于存储题目信息.试卷信息和学生信息:列表用于存储多个题目.试卷和学生的集合:对象用于封装题目.试卷.学生和答案的具体属性. 字符串解析:题目 ...
- (Python基础教程之十八)Python字典交集–比较两个字典
Python示例,用于查找2个或更多词典之间的常见项目,即字典相交项目. 1.使用"&"运算符的字典交集 最简单的方法是查找键,值或项的交集,即 & 在两个字典之间 ...
- vue中使用百度地图
vue-cli创建的项目中使用百度地图,样式如下: 根据后台返回的不同的信息,展示不同的标记以及对应的标记信息,点击鼠标后展示弹窗 首先,引入vue-baidu-map,以展示地图,对应的命令是 np ...
- java/spring项目打成jar包供第三方引用方案
分类 单独工具类 比如StringUtils 注入类工具类 实现 单独工具类 将项目打jar包 项目结构 开始打包: 在目标项目中pom引用直接使用 注入类工具类 当我们想要利用SpringBoot封 ...