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
相关产品推荐
相关产品推荐

