You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Quartz.net中通过依赖注入使用已配置的调度器

故障排查与修复方案

1. 确认GetScheduler入参匹配规则

ISchedulerFactory.GetScheduler()方法接收的参数为调度器名称(SchedulerName) 而非调度器ID,你当前配置中SchedulerName与SchedulerId均设置为S1,这一步配置没问题,可先调试确认调用时传入的名称没有大小写差异、拼写错误。

2. 补全Quartz服务注册流程

仅调用AddQuartz()仅完成了核心配置的注入,还需要注册对应的托管服务,才能让DI容器完成调度器实例的初始化:

services.AddQuartz(q =>
{
    q.SchedulerId = "S1";
    q.SchedulerName = "S1";
    
    q.UseMicrosoftDependencyInjectionJobFactory();

    q.UsePersistentStore(s =>
    {
        s.UseProperties = true;
        s.UsePostgres("ConnectionString");
      
        s.UseJsonSerializer();
    });
})
// 新增以下托管服务注册代码
.AddQuartzHostedService(options =>
{
    options.AutoStart = true;
    options.SchedulerName = "S1";
});

3. 检查持久化存储状态

你配置了PostgreSQL持久化存储,以下异常情况也会导致调度器获取失败:

  • 传入的连接字符串无效,无法正常连接目标数据库
  • Quartz持久化所需的表结构未在目标库中正确创建
  • 库中存在残留的异常调度器实例数据,测试环境可清空Quartz相关表数据后重试

4. 简化注入逻辑(单调度器场景适用)

如果你的服务中仅部署单台调度器,不需要通过工厂手动获取实例,可直接注入已配置好的IScheduler实例:

public SchedulerStartup(IScheduler scheduler)
{
    this.Scheduler = scheduler;
}

public async Task StartAsync(CancellationToken cancellationToken)
{
    if (!Scheduler.IsStarted)
    {
        await Scheduler.Start(cancellationToken);
    }
}

内容的提问来源于stack exchange,提问作者Ankush Madankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:06:06