.NET5 Worker Service集成Quartz.Net使用SQLite持久化提示无QRTZ_LOCKS表
问题解决方法
你遇到的报错是因为Quartz.Net默认不会自动创建持久化所需的系统表,缺少自动建表的相关配置,修正方案如下:
1. 新增自动建表配置
在UsePersistentStore配置块中添加AutoCreateSchema = true配置即可,修改后完整代码如下:
services.AddQuartz(q => { // Use a Scoped container to create jobs. I'll touch on this later q.UseMicrosoftDependencyInjectionJobFactory(); q.UsePersistentStore(c => { c.UseSQLite(@"URI=file:MyDatabase.sqlite;Version=3;"); // 新增此行配置,启动时自动校验并创建Quartz所需的调度系统表 c.AutoCreateSchema = true; c.UseJsonSerializer(); //c.UseBinarySerializer(); This option didn't make a difference }); });
2. 额外说明
- 首次启动完成表创建后,可将该配置改为
false,避免每次启动都执行表结构校验,降低不必要的启动开销 - 若生产环境不允许自动建表权限,也可以手动执行Quartz.Net官方提供的SQLite建表脚本,提前创建好所有QRTZ_开头的系统表后再启动服务
- 请确保运行程序的账户对SQLite文件所在目录拥有读写权限,否则会出现建表失败的问题
内容的提问来源于stack exchange,提问作者Travis Pettry
相关产品推荐
相关产品推荐

