Quartz.NET调度器仅从app.config取连接串?DI误用问题排查与解决
解决ASP.NET Core集成Quartz时误用RAM作业存储的问题
场景说明
我开发了一个集成Quartz的ASP.NET Core Web应用,核心逻辑如下:
- 应用启动时将作业蓝图写入数据库
- 接收用户输入信息后,添加触发器并调度对应作业
遇到的问题
调度作业时,Quartz抛出“无法在作业存储中找到作业”的错误,排查后发现它没有使用配置的数据库作业存储,反而默认启用了RAM作业存储。
排查过程
- 最初尝试多种配置排查,偶然添加
app.config并配置数据库连接串后,Quartz居然能正常获取连接串并完成调度。 - 但ASP.NET Core推荐使用
appsettings.json作为配置文件,而且Program.cs中配置作业时,明明能正常从appsettings.json读取连接串,这让我疑惑是否存在某个配置让Quartz优先读取app.config。
根因分析
最终定位到问题根源:
虽然在Program.cs中已经通过Microsoft依赖注入完成了Quartz的初始化配置,但调度器并未正确利用DI容器。原来的StartAsync方法中是手动实例化StdSchedulerFactory,而不是通过构造函数注入ISchedulerFactory——这是对依赖注入的基础误解导致的错误。
解决方案
将StartAsync中手动实例化StdSchedulerFactory的代码,改为通过构造函数注入ISchedulerFactory,让调度器使用DI容器中已经配置好的Quartz实例。修改后,Quartz就能正确读取appsettings.json中的配置,使用数据库作业存储,问题解决。
内容的提问来源于stack exchange,提问作者Jat
相关产品推荐
相关产品推荐

