它的持久化也正是項目考慮是否使用quartz的最關鍵原因,它一共會給我們自動創建11張表,會把內存中的jobdetail和trigger的二進制的形式序列化到數據庫中。
等下次服務重啟之后,會自動執行數據庫里面的tirgger和jobdetail,哪怕這時候,系統中已經把對應的jobdetail和trigger給去掉了,只要Job還在系統里。
select * from qrtz_triggers;
select * from qrtz_job_details;
select * from qrtz_cron_triggers;
select * from qrtz_calendars;
select * from qrtz_locks;
select * from qrtz_blob_triggers;
select * from qrtz_fired_triggers;
select * from qrtz_simple_triggers;
select * from qrtz_scheduler_state;
select * from qrtz_paused_trigger_grps;
select * from qrtz_simprop_triggers;
前面3張表是最常用的。
持久化的操作其實只需要增加配置就可以了,在spring環境下就是修改yml或者propertites文件而已
持久化策略1:和業務庫公用一個庫

spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://10.119.169.24:3306/krm_sit?characterEncoding=utf8&useSSL=false&allowMultiQueries=true username: krm-sit password: Kpmg#2020 quartz: job-store-type: jdbc jdbc: initialize-schema: always #initialize-schema: never
持久化策略2:和業務庫分開使用

spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/quartz?characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=151310 spring.quartz.properties.org.quartz.dataSource.myDS.URL=jdbc:mysql:///quartz?characterEncoding=utf8&serverTimezone=UTC spring.quartz.properties.org.quartz.dataSource.myDS.user=root spring.quartz.properties.org.quartz.dataSource.myDS.password=151310 spring.quartz.properties.org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver spring.quartz.properties.org.quartz.dataSource.myDS.maxConnections=5 spring.quartz.job-store-type=jdbc
這里我沒測試。
spring.quartz.jdbc.initialize-schema: never
always:每次服務重啟,會清空表
nerver:從來不清空表,也就是老的定時任務啟動時候還會繼續運行