在做一个定时任务管理,要求动态定时任务,前端修改Cron表达式后即可生效,比如从 每10执行一次(0/15 * * * * ?)改为每一分钟执行一次(* 0/1 * * * ?),并非硬编码方式使用注解@Scheduled 的方式,此方法不灵活修改时间改代码很不方便
于是 SpringBoot整合Quarzt,前面也有写过一篇
但是版本发布之后,发现时间不论设置什么 都会每秒执行一次,很郁闷,各种原因排查
引入jar问题,并不是,重新review 代码发现也没有什么问题;
难道是少了配置
# ## quartz定时任务,采用数据库方式 # quartz: # job-store-type: jdbc # initialize-schema: embedded # #设置自动启动,默认为 true # auto-startup: true # #启动时更新己存在的Job # overwrite-existing-jobs: true # properties: # org: # quartz: # scheduler: # instanceName: MyScheduler # instanceId: AUTO # jobStore: # class: org.quartz.impl.jdbcjobstore.JobStoreTX # driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # tablePrefix: QRTZ_ # isClustered: true # misfireThreshold: 60000 # clusterCheckinInterval: 10000 # threadPool: # class: org.quartz.simpl.SimpleThreadPool # threadCount: 10 # threadPriority: 5 # threadsInheritContextClassLoaderOfInitializingThread: true
启动项目发现少了几张表 "QRTZ_LOCKS" dones't exist
于是导入quartz相关的表
下载地址: https://www.quartz-scheduler.org/downloads/files/quartz-2.2.3-distribution.tar.gz
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_SIMPLE_TRIGGERS; DROP TABLE IF EXISTS QRTZ_SIMPROP_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 VARCHAr(120) NOT NULL, JOB_NAME VARCHAr(200) NOT NULL, JOB_GROUP VARCHAr(200) NOT NULL, DESCRIPTION VARCHAr(250) NULL, JOB_CLASS_NAME VARCHAr(250) NOT NULL, IS_DURABLE VARCHAr(1) NOT NULL, IS_NONCONCURRENT VARCHAr(1) NOT NULL, IS_UPDATE_DATA VARCHAr(1) NOT NULL, REQUESTS_RECOVERY VARCHAr(1) NOT NULL, JOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) ); CREATE TABLE QRTZ_TRIGGERS ( SCHED_NAME VARCHAr(120) NOT NULL, TRIGGER_NAME VARCHAr(200) NOT NULL, TRIGGER_GROUP VARCHAr(200) NOT NULL, JOB_NAME VARCHAr(200) NOT NULL, JOB_GROUP VARCHAr(200) NOT NULL, DESCRIPTION VARCHAr(250) NULL, NEXT_FIRE_TIME BIGINT(13) NULL, PREV_FIRE_TIME BIGINT(13) NULL, PRIORITY INTEGER NULL, TRIGGER_STATE VARCHAr(16) NOT NULL, TRIGGER_TYPE VARCHAr(8) NOT NULL, START_TIME BIGINT(13) NOT NULL, END_TIME BIGINT(13) NULL, CALENDAR_NAME VARCHAr(200) NULL, MISFIRE_INSTR SMALLINT(2) 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 VARCHAr(120) NOT NULL, TRIGGER_NAME VARCHAr(200) NOT NULL, TRIGGER_GROUP VARCHAr(200) NOT NULL, REPEAT_COUNT BIGINT(7) NOT NULL, REPEAT_INTERVAL BIGINT(12) NOT NULL, TIMES_TRIGGERED BIGINT(10) 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) ); CREATE TABLE QRTZ_CRON_TRIGGERS ( SCHED_NAME VARCHAr(120) NOT NULL, TRIGGER_NAME VARCHAr(200) NOT NULL, TRIGGER_GROUP VARCHAr(200) NOT NULL, CRON_EXPRESSION VARCHAr(200) NOT NULL, TIME_ZONE_ID VARCHAr(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) ); CREATE TABLE QRTZ_SIMPROP_TRIGGERS ( SCHED_NAME VARCHAr(120) NOT NULL, TRIGGER_NAME VARCHAr(200) NOT NULL, TRIGGER_GROUP VARCHAr(200) NOT NULL, STR_PROP_1 VARCHAr(512) NULL, STR_PROP_2 VARCHAr(512) NULL, STR_PROP_3 VARCHAr(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(13,4) NULL, DEC_PROP_2 NUMERIC(13,4) NULL, BOOL_PROP_1 VARCHAr(1) NULL, BOOL_PROP_2 VARCHAr(1) 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) ); CREATE TABLE QRTZ_BLOB_TRIGGERS ( SCHED_NAME VARCHAr(120) NOT NULL, TRIGGER_NAME VARCHAr(200) NOT NULL, TRIGGER_GROUP VARCHAr(200) 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) ); CREATE TABLE QRTZ_CALENDARS ( SCHED_NAME VARCHAr(120) NOT NULL, CALENDAR_NAME VARCHAr(200) NOT NULL, CALENDAR BLOB NOT NULL, PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) ); CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( SCHED_NAME VARCHAr(120) NOT NULL, TRIGGER_GROUP VARCHAr(200) NOT NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) ); CREATE TABLE QRTZ_FIRED_TRIGGERS ( SCHED_NAME VARCHAr(120) NOT NULL, ENTRY_ID VARCHAr(95) NOT NULL, TRIGGER_NAME VARCHAr(200) NOT NULL, TRIGGER_GROUP VARCHAr(200) NOT NULL, INSTANCE_NAME VARCHAr(200) NOT NULL, FIRED_TIME BIGINT(13) NOT NULL, SCHED_TIME BIGINT(13) NOT NULL, PRIORITY INTEGER NOT NULL, STATE VARCHAr(16) NOT NULL, JOB_NAME VARCHAr(200) NULL, JOB_GROUP VARCHAr(200) NULL, IS_NONCONCURRENT VARCHAr(1) NULL, REQUESTS_RECOVERY VARCHAr(1) NULL, PRIMARY KEY (SCHED_NAME,ENTRY_ID) ); CREATE TABLE QRTZ_SCHEDULER_STATE ( SCHED_NAME VARCHAr(120) NOT NULL, INSTANCE_NAME VARCHAr(200) NOT NULL, LAST_CHECKIN_TIME BIGINT(13) NOT NULL, CHECKIN_INTERVAL BIGINT(13) NOT NULL, PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) ); CREATE TABLE QRTZ_LOCKS ( SCHED_NAME VARCHAr(120) NOT NULL, LOCK_NAME VARCHAr(40) NOT NULL, PRIMARY KEY (SCHED_NAME,LOCK_NAME) ); commit;
启动项目又发现新的问题
Couldn't store job: Unable to serialize JobDataMap for insertion into database because the value of property
于是百度了下,最终找到了一个类似的如下,文章很早之前的了
尝试着实体类是实现了 序列化接口 Serializable 再次启动居然成功了
最后删去配置文件和注释掉配置类,把导入的几张表也删除也是成功运行
总结 最终实现Serializable 接口