在開發過程中,定時任務隨處可見,很多是配合業務功能使用的,任務調度的好,工作纔會甜甜的。
本文主要是介紹,使用實例詳見:傳送門
常見的幾種任務調度方式:
- Timer(自帶的定時器) ;
- ScheduledExecutor ;
- 開源工具包 Quartz ;
- 開源工具包 JCronTab ;
- 分佈式任務調度平臺 XXL-job (傳送門)
常見的困擾
- 項目中寫死執行調度頻率基本上不靈活,無法傳動態參數 ;
- 部署一個分佈式調度平臺,若數據量沒那麼大,顯得厚重,得有服務器部署也複雜 ;
功能期望
- 支持手動啓動與停止 ;
- 支持傳動態參數 ;
- 支持改時間表達式(調度頻率);
xqiang-job-admin是什麼?
xqiang-job項目是基於springBoot+quartz+ mysql+ layui 實現的定時任務靈活的單體調度平臺。<br />輕鬆實現任務調度。使用簡單,引入一個JAR,新增3張任務相關表接口,功能包含登錄鑑權、用戶管理、任務管理、任務操作日誌。<br />
登錄鑑權
首頁統計
- 任務統計
- 系統信息
- 內存信息
任務管理
- 實現任務的增刪改
- 任務的啓動停止
- 設置任務的動態執行參數等
人員管理
- 調度平臺登錄用戶的管理,權限設置等
操作日誌
- 展示任務操作的記錄,包括任務的啓動,停止,修改 ;
- 任務修改會記錄修改前後的內容比較;
數據庫表
任務表
project_key-項目KEY作用主要是,表可以複用,也起到了隔離各項目的任務作用
比如有兩個系統,A和B,系統A和B的job是分開的,可以公用一套任務表,設置不同的project_key
CREATE TABLE `scheduled_quartz_job` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`project_key` varchar(50) NOT NULL DEFAULT '' COMMENT '項目KEY',
`job_class` varchar(80) NOT NULL COMMENT '任務接口類名',
`job_method` varchar(80) NOT NULL COMMENT '任務方法名',
`job_arguments` varchar(2048) NOT NULL COMMENT '任務參數',
`job_group` varchar(80) NOT NULL COMMENT '任務分組',
`job_name` varchar(80) NOT NULL COMMENT '任務名稱',
`job_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '任務狀態 1-啓用 2-停用',
`cron_expression` varchar(80) NOT NULL COMMENT '時間表達式',
`description` varchar(64) NOT NULL DEFAULT '' COMMENT '任務描述',
`last_run_timestamp` bigint(20) NOT NULL DEFAULT '-1' COMMENT '最後執行時間戳',
`create_by` varchar(50) NOT NULL DEFAULT '' COMMENT '創建人ID',
`create_name` varchar(50) NOT NULL DEFAULT '' COMMENT '創建人名稱',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
`update_by` varchar(50) NOT NULL DEFAULT '' COMMENT '最後修改人ID',
`update_name` varchar(50) NOT NULL DEFAULT '' COMMENT '最後修改人名稱',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
`del_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '刪除標記 0正常 1-刪除',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_project` (`project_key`) USING BTREE,
KEY `idx_job_class_method` (`job_class`,`job_method`) USING BTREE,
KEY `idx_job_name` (`job_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='任務表';
任務日誌表
- 用戶記錄對任務的操作,比如張三在xx時刻新建了任務xx,在某時刻停止了任務。
CREATE TABLE `scheduled_quartz_job_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`project_key` varchar(50) NOT NULL DEFAULT '' COMMENT '項目key',
`job_id` int(11) unsigned NOT NULL COMMENT '任務ID',
`log_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '日誌類型 1-新增 2-修改 3-啓動 4-停止 5-刪除',
`log_desc` varchar(32) NOT NULL DEFAULT '' COMMENT '日誌描述',
`content` varchar(2048) NOT NULL DEFAULT '' COMMENT '日誌內容',
`ip_address` varchar(128) NOT NULL DEFAULT '' COMMENT 'IP地址',
`operate_id` varchar(32) NOT NULL DEFAULT '' COMMENT '操作人ID',
`operate_name` varchar(32) NOT NULL DEFAULT '' COMMENT '操作人名稱',
`remarks` varchar(255) NOT NULL DEFAULT '' COMMENT '備註',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_job_id` (`job_id`) USING BTREE,
KEY `idx_ooperate_id` (`ip_address`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='任務日誌記錄表';
用戶表
CREATE TABLE `scheduled_quartz_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`project_key` varchar(50) NOT NULL COMMENT '項目Key',
`username` varchar(32) NOT NULL COMMENT '用戶名',
`salt` varchar(40) NOT NULL COMMENT '鹽',
`password` varchar(40) NOT NULL COMMENT '密碼',
`real_name` varchar(50) NOT NULL DEFAULT '' COMMENT '真實姓名',
`user_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態 1-啓用;2-停用;3-鎖定',
`user_type` tinyint(1) NOT NULL DEFAULT '3' COMMENT '用戶類型 1-超級管理員 2-管理員 3-普通用戶',
`menus` varchar(1024) NOT NULL DEFAULT '' COMMENT '菜單權限集',
`functions` varchar(1024) NOT NULL DEFAULT '' COMMENT '功能權限集',
`remarks` varchar(256) NOT NULL DEFAULT '' COMMENT '備註',
`last_login_timestamp` bigint(20) NOT NULL DEFAULT '-1' COMMENT '最後登錄時間戳',
`create_by` varchar(50) NOT NULL DEFAULT '' COMMENT '創建人ID',
`create_name` varchar(50) NOT NULL DEFAULT '' COMMENT '創建人名稱',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
`update_by` varchar(50) NOT NULL DEFAULT '' COMMENT '最後修改人ID',
`update_name` varchar(50) NOT NULL DEFAULT '' COMMENT '最後修改人名稱',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
`del_flag` tinyint(1) NOT NULL DEFAULT '0' COMMENT '刪除標記 0-正常,1-刪除',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_username` (`username`) USING BTREE,
KEY `idx_project` (`project_key`),
KEY `idx_real_name` (`real_name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='任務管理平臺用戶信息表';
開源地址
公衆號
更多精彩內容、編程故事、心得分享,歡迎關注公衆號