在ABP框架中使用Quartz做background job
具体引用什么包,可以参考Background Jobs Quartz | Documentation Center | ABP.IO
由于读写不是那么多,就准备使用sqlite 作为数据库使用。
更新下:在使用sqlite时遇到lock问题(比如登陆时)解决方案
在ConfigureService中配置下:
Configure<AbpUnitOfWorkDefaultOptions>(options =>
{
options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled;
});
配置的时候遇到了点问题
由于采用的是上面链接介绍的第二种配置方式
PreConfigure<AbpQuartzOptions>(options =>
{
options.Configurator = configure =>
{
configure.UsePersistentStore(storeOptions =>
{
storeOptions.UseProperties = true;
storeOptions.UseJsonSerializer();
storeOptions.UseSqlite(configuration.GetConnectionString("Quartz"));
});
};
});
结果发现有点问题。
经过一番调试(查看quartz源码,和Windows日志事件发现是配置有问题)和翻看别人的配置
storeOptions.UseSqlite(configuration.GetConnectionString("Quartz"));改成了
storeOptions.UseMicrosoftSQLite(configuration.GetConnectionString("Quartz"));
经过日志查看,UseSqlite需要引入System.Data.SQLite
而我已经通过引入Volo.Abp.EntityFrameworkCore.Sqlite引入了
Microsoft.EntityFrameworkCore.Sqlite
数据库配置字符支持2中
"ConnectionStrings": {
"Quartz": "Filename=./xxxx.sqlite"
},
或者
"ConnectionStrings": {
"Quartz": "Data Source=./xxxx.sqlite"
},
或者
"ConnectionStrings": {
"Quartz": "Data Source=.\\xxx.sqlite"
},
重要的是,一定要在sqlite中先创建相关的表
相关的sql代码在quartz.net 源码中,地址在quartznet/database/tables at main · quartznet/quartznet · GitHub。注意在有的工具在执行sql语句时报错,那就换个工具,我是在sqlite studio里执行的。