(十).NET6.0 搭建基于Quartz组件的定时调度任务
1.(九).NET6.0搭建基于Redis的Hangfire定时器
2.(十).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运行结果(每一秒执行一次的示例)
合集:
定时任务
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤