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

Quartz.NET中AdoJobStore的配置代码应放置在何处?

Quartz.NET AdoJobStore 配置位置说明

针对你在桌面应用中配置AdoJobStore的疑问,以下是两种主流配置方式的具体实现:


一、依赖注入场景(推荐,对应Services.GetRequiredService<ISchedulerFactory>)

当前.NET Core/.NET 5+ 桌面应用(如WPF、WinForms)普遍使用依赖注入,AdoJobStore配置直接通过AddQuartz扩展方法完成,替代了旧版NameValueCollection传参的方式:

// 初始化依赖注入容器
var services = new ServiceCollection();

services.AddQuartz(q =>
{
    // 配置持久化存储(AdoJobStore)
    q.UsePersistentStore(s =>
    {
        s.UseProperties = true;
        // 以SQL Server为例,其他数据库可替换为对应扩展方法(如UseMySql)
        s.UseSqlServer(sql =>
        {
            sql.ConnectionString = "你的数据库连接字符串";
            sql.TablePrefix = "QRTZ_"; // 可选:自定义Quartz表前缀
        });
        // 指定JobStoreTX类型,对应官方文档的quartz.jobStore.type配置
        s.UseJobStore<JobStoreTX>();
    });
});

// 可选:添加Quartz后台托管服务,保证任务后台运行
services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);

// 获取SchedulerFactory并启动调度器
var serviceProvider = services.BuildServiceProvider();
var schedulerFactory = serviceProvider.GetRequiredService<ISchedulerFactory>();
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();

二、使用配置文件管理参数

如果习惯用配置文件统一管理参数,可根据项目框架选择对应配置方式:

.NET Framework 桌面应用(app.config)

在app.config中添加Quartz配置节:

<configuration>
  <configSections>
    <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <quartz>
    <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
    <add key="quartz.jobStore.dataSource" value="default" />
    <add key="quartz.dataSource.default.connectionString" value="你的数据库连接字符串" />
    <add key="quartz.dataSource.default.provider" value="SqlServer" />
    <add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
  </quartz>
</configuration>

代码中读取配置:

var services = new ServiceCollection();
services.AddQuartz(config =>
{
    // 从app.config加载Quartz配置
    config.UseConfiguration(new NameValueCollection(System.Configuration.ConfigurationManager.GetSection("quartz") as NameValueCollection));
});

services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);

var serviceProvider = services.BuildServiceProvider();
var schedulerFactory = serviceProvider.GetRequiredService<ISchedulerFactory>();
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();

.NET Core/.NET 5+ 桌面应用(appsettings.json)

在appsettings.json中添加配置:

{
  "Quartz": {
    "jobStore": {
      "type": "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
      "dataSource": "default",
      "tablePrefix": "QRTZ_"
    },
    "dataSource": {
      "default": {
        "connectionString": "你的数据库连接字符串",
        "provider": "SqlServer"
      }
    }
  }
}

代码中读取配置:

var configuration = new ConfigurationBuilder()
    .SetBasePath(AppContext.BaseDirectory)
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

var services = new ServiceCollection();
services.AddQuartz(config =>
{
    config.UseConfiguration(configuration.GetSection("Quartz"));
});

services.AddQuartzHostedService(q => q.WaitForJobsToComplete = true);

var serviceProvider = services.BuildServiceProvider();
var schedulerFactory = serviceProvider.GetRequiredService<ISchedulerFactory>();
var scheduler = await schedulerFactory.GetScheduler();
await scheduler.Start();

补充说明

旧版StdSchedulerFactory传入NameValueCollection的方式仍可使用,但在依赖注入场景下,AddQuartz扩展方法更符合现代.NET开发模式,配置更直观且易于维护。

内容的提问来源于stack exchange,提问作者Elon Obama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:33:16