SpringBoot2.6.3集成quartz的方式
quartz使用
quartz啟動需要數據庫有很多表的支持,這些表的建表腳本可以通過如下方式找到
如何找到quartz的數據庫腳本
在這裡下載,需要註意的是下載2.2.3這個版本,不知道為什麼高版本的反而沒有,真是佛瞭
集成Springboot
代碼
yml配置
spring: application: name: demo-excel datasource: url: jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/quartz_demo?zeroDateTimeBehavior=convertToNull password: quartz_demo username: quartz_demo driver-class-name: com.mysql.cj.jdbc.Driver name: datasource1 quartz: # quartz任務存儲類型:jdbc或memory job-store-type: jdbc # 關閉時等待任務完成 wait-for-jobs-to-complete-on-shutdown: true # 可以覆蓋已有的任務 overwrite-existing-jobs: true properties: org: quartz: scheduler: # 調度器實例名稱 instanceName: scheduler # 調度器實例ID自動生成 instanceId: AUTO jobStore: class: org.springframework.scheduling.quartz.LocalDataSourceJobStore driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # quartz相關表前綴 tablePrefix: QRTZ_ useProperties: false threadPool: class: org.quartz.simpl.SimpleThreadPool # 設置並發線程數量 threadCount: 10 # 指定線程優先級 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true server: port: 8190 mybatis-plus: mapper-locations: classpath*:/mapperxml/*.xml
實現一個最簡單的任務,該任務輸出1111
@Component public class TestJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { // 任務的具體邏輯 System.out.println(1111); } }
配置這個任務的執行計劃
@Configuration public class QuartzConfig { @Bean public JobDetail jobDetail() { JobDetail jobDetail = JobBuilder.newJob(TestJob.class) .withIdentity("test", "test") .storeDurably() .build(); return jobDetail; } public Trigger trigger() { Trigger trigger = TriggerBuilder.newTrigger() .forJob(jobDetail()) .startNow() .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?")) return trigger; }
啟動任務會看到控制臺每秒鐘打印一次1111
進階
上訴任務是配置在代碼中,那麼如果我們想把任務配置數據庫中,這樣我們就可以做一個定時任務的維護頁面,可以對定時任務的觸發規則修改,及修改刪除定時任務應該怎麼做呢?
先定義一張存儲定時任務的表
-- auto-generated definition create table sys_job ( id bigint not null primary key, job_name varchar(64) not null comment '任務名稱', job_group varchar(64) not null comment '任務組名', method_name varchar(500) null comment '任務方法', method_params varchar(50) null comment '方法參數', cron_expression varchar(255) null comment 'cron執行表達式', misfire_policy varchar(20) default '3' null comment '計劃執行錯誤策略(1立即執行 2執行一次 3放棄執行)', concurrent char default '1' null comment '是否並發執行(0允許 1禁止)', status char default '0' null comment '狀態(0正常 1暫停)', create_by varchar(64) null comment '創建者', create_time datetime null comment '創建時間', update_by varchar(64) null comment '更新者', update_time datetime null comment '更新時間', remark varchar(500) null comment '備註信息' ) comment '定時任務調度表';
插入一條數據
INSERT INTO quartz_demo.sys_job (id, job_name, job_group, method_name, method_params, cron_expression, misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark) VALUES (1, 'testJob2', 'test2', 'exec', null, '* * * * * ?', '2', '1', '0', null, null, null, null, null);
同時定義一張執行結果記錄表
-- auto-generated definition create table sys_job_log ( job_log_id int auto_increment comment '任務日志ID' primary key, job_name varchar(64) not null comment '任務名稱', job_group varchar(64) not null comment '任務組名', method_name varchar(500) null comment '任務方法', method_params varchar(50) null comment '方法參數', job_message varchar(500) null comment '日志信息', status char default '0' null comment '執行狀態(0正常 1失敗)', exception_info varchar(2000) null comment '異常信息', create_time datetime null comment '創建時間' ) comment '定時任務調度日志表';
項目啟動時讀取這張表裡的數據放到quartz中執行
由於代碼太多瞭,這邊就不列出來代碼瞭,demo已經上傳到GitHub,項目基於springboot、mybatisplus。啟動加載任務的代碼在com.bxoon.service.impl.SysJobServiceImpl
中
到此這篇關於SpringBoot2.6.3集成quartz的文章就介紹到這瞭,更多相關SpringBoot集成quartz內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- springboot整合quartz項目使用案例
- MySQL中建表與常見的類型設計陷阱詳解
- SpringBoot 整合 Quartz 定時任務框架詳解
- SpringBoot集成Flyway進行數據庫版本遷移管理的步驟
- springboot創建的web項目整合Quartz框架的項目實踐