在ABP框架中使用Quartz做background job
具体引用什么包,可以参考Background Jobs Quartz | Documentation Center | ABP.IO
由于读写不是那么多,就准备使用sqlite 作为数据库使用。
更新下:在使用sqlite时遇到lock问题(比如登陆时)解决方案
在ConfigureService中配置下:
Configure
{
options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled;
});
配置的时候遇到了点问题
由于采用的是上面链接介绍的第二种配置方式
- PreConfigure
(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 源码中,这里转载过来的。注意在有的工具里以下语句可能被被报错,那就换个工具,我是在sqlite studio里执行的。
- DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
- DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
- DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
- DROP TABLE IF EXISTS QRTZ_LOCKS;
- DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
- DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
- DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
- DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
- DROP TABLE IF EXISTS QRTZ_TRIGGERS;
- DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
- DROP TABLE IF EXISTS QRTZ_CALENDARS;
-
-
- CREATE TABLE QRTZ_JOB_DETAILS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- JOB_NAME NVARCHAR(150) NOT NULL,
- JOB_GROUP NVARCHAR(150) NOT NULL,
- DESCRIPTION NVARCHAR(250) NULL,
- JOB_CLASS_NAME NVARCHAR(250) NOT NULL,
- IS_DURABLE BIT NOT NULL,
- IS_NONCONCURRENT BIT NOT NULL,
- IS_UPDATE_DATA BIT NOT NULL,
- REQUESTS_RECOVERY BIT NOT NULL,
- JOB_DATA BLOB NULL,
- PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
- );
-
- CREATE TABLE QRTZ_TRIGGERS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- TRIGGER_NAME NVARCHAR(150) NOT NULL,
- TRIGGER_GROUP NVARCHAR(150) NOT NULL,
- JOB_NAME NVARCHAR(150) NOT NULL,
- JOB_GROUP NVARCHAR(150) NOT NULL,
- DESCRIPTION NVARCHAR(250) NULL,
- NEXT_FIRE_TIME BIGINT NULL,
- PREV_FIRE_TIME BIGINT NULL,
- PRIORITY INTEGER NULL,
- TRIGGER_STATE NVARCHAR(16) NOT NULL,
- TRIGGER_TYPE NVARCHAR(8) NOT NULL,
- START_TIME BIGINT NOT NULL,
- END_TIME BIGINT NULL,
- CALENDAR_NAME NVARCHAR(200) NULL,
- MISFIRE_INSTR INTEGER NULL,
- JOB_DATA BLOB NULL,
- PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
- REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
- );
-
- CREATE TABLE QRTZ_SIMPLE_TRIGGERS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- TRIGGER_NAME NVARCHAR(150) NOT NULL,
- TRIGGER_GROUP NVARCHAR(150) NOT NULL,
- REPEAT_COUNT BIGINT NOT NULL,
- REPEAT_INTERVAL BIGINT NOT NULL,
- TIMES_TRIGGERED BIGINT NOT NULL,
- PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ON DELETE CASCADE
- );
-
- CREATE TRIGGER DELETE_SIMPLE_TRIGGER DELETE ON QRTZ_TRIGGERS
- BEGIN
- DELETE FROM QRTZ_SIMPLE_TRIGGERS WHERE SCHED_NAME=OLD.SCHED_NAME AND TRIGGER_NAME=OLD.TRIGGER_NAME AND TRIGGER_GROUP=OLD.TRIGGER_GROUP;
- END
- ;
-
- CREATE TABLE QRTZ_SIMPROP_TRIGGERS
- (
- SCHED_NAME NVARCHAR (120) NOT NULL ,
- TRIGGER_NAME NVARCHAR (150) NOT NULL ,
- TRIGGER_GROUP NVARCHAR (150) NOT NULL ,
- STR_PROP_1 NVARCHAR (512) NULL,
- STR_PROP_2 NVARCHAR (512) NULL,
- STR_PROP_3 NVARCHAR (512) NULL,
- INT_PROP_1 INT NULL,
- INT_PROP_2 INT NULL,
- LONG_PROP_1 BIGINT NULL,
- LONG_PROP_2 BIGINT NULL,
- DEC_PROP_1 NUMERIC NULL,
- DEC_PROP_2 NUMERIC NULL,
- BOOL_PROP_1 BIT NULL,
- BOOL_PROP_2 BIT NULL,
- TIME_ZONE_ID NVARCHAR(80) NULL,
- PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ON DELETE CASCADE
- );
-
- CREATE TRIGGER DELETE_SIMPROP_TRIGGER DELETE ON QRTZ_TRIGGERS
- BEGIN
- DELETE FROM QRTZ_SIMPROP_TRIGGERS WHERE SCHED_NAME=OLD.SCHED_NAME AND TRIGGER_NAME=OLD.TRIGGER_NAME AND TRIGGER_GROUP=OLD.TRIGGER_GROUP;
- END
- ;
-
- CREATE TABLE QRTZ_CRON_TRIGGERS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- TRIGGER_NAME NVARCHAR(150) NOT NULL,
- TRIGGER_GROUP NVARCHAR(150) NOT NULL,
- CRON_EXPRESSION NVARCHAR(250) NOT NULL,
- TIME_ZONE_ID NVARCHAR(80),
- PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ON DELETE CASCADE
- );
-
- CREATE TRIGGER DELETE_CRON_TRIGGER DELETE ON QRTZ_TRIGGERS
- BEGIN
- DELETE FROM QRTZ_CRON_TRIGGERS WHERE SCHED_NAME=OLD.SCHED_NAME AND TRIGGER_NAME=OLD.TRIGGER_NAME AND TRIGGER_GROUP=OLD.TRIGGER_GROUP;
- END
- ;
-
- CREATE TABLE QRTZ_BLOB_TRIGGERS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- TRIGGER_NAME NVARCHAR(150) NOT NULL,
- TRIGGER_GROUP NVARCHAR(150) NOT NULL,
- BLOB_DATA BLOB NULL,
- PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) ON DELETE CASCADE
- );
-
- CREATE TRIGGER DELETE_BLOB_TRIGGER DELETE ON QRTZ_TRIGGERS
- BEGIN
- DELETE FROM QRTZ_BLOB_TRIGGERS WHERE SCHED_NAME=OLD.SCHED_NAME AND TRIGGER_NAME=OLD.TRIGGER_NAME AND TRIGGER_GROUP=OLD.TRIGGER_GROUP;
- END
- ;
-
- CREATE TABLE QRTZ_CALENDARS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- CALENDAR_NAME NVARCHAR(200) NOT NULL,
- CALENDAR BLOB NOT NULL,
- PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
- );
-
- CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- TRIGGER_GROUP NVARCHAR(150) NOT NULL,
- PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
- );
-
- CREATE TABLE QRTZ_FIRED_TRIGGERS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- ENTRY_ID NVARCHAR(140) NOT NULL,
- TRIGGER_NAME NVARCHAR(150) NOT NULL,
- TRIGGER_GROUP NVARCHAR(150) NOT NULL,
- INSTANCE_NAME NVARCHAR(200) NOT NULL,
- FIRED_TIME BIGINT NOT NULL,
- SCHED_TIME BIGINT NOT NULL,
- PRIORITY INTEGER NOT NULL,
- STATE NVARCHAR(16) NOT NULL,
- JOB_NAME NVARCHAR(150) NULL,
- JOB_GROUP NVARCHAR(150) NULL,
- IS_NONCONCURRENT BIT NULL,
- REQUESTS_RECOVERY BIT NULL,
- PRIMARY KEY (SCHED_NAME,ENTRY_ID)
- );
-
- CREATE TABLE QRTZ_SCHEDULER_STATE
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- INSTANCE_NAME NVARCHAR(200) NOT NULL,
- LAST_CHECKIN_TIME BIGINT NOT NULL,
- CHECKIN_INTERVAL BIGINT NOT NULL,
- PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
- );
-
- CREATE TABLE QRTZ_LOCKS
- (
- SCHED_NAME NVARCHAR(120) NOT NULL,
- LOCK_NAME NVARCHAR(40) NOT NULL,
- PRIMARY KEY (SCHED_NAME,LOCK_NAME)
- );