背景
最近帮别人开发一个数据定时导入的小项目时,需求中明确提出导入数据的时间为可配置式。所以写下这篇文章记录一下。
准备工作
准备
mysql
数据库,主要存储需要动态配置的cron
表达式执行
SQL
,需要先创建数据库:springbootdb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22DROP TABLE IF EXISTS `job_cron`;
CREATE TABLE `job_cron` (
`id` int(10) NOT NULL,
`cron` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`current` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0',
`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `job_cron` VALUES (1, '0 0/5 * * * ? ', '0', '每5分钟执行一次');
INSERT INTO `job_cron` VALUES (2, '0 0/15 * * * ? ', '0', '每15分钟执行一次');
INSERT INTO `job_cron` VALUES (3, '0 0/30 * * * ? ', '0', '每30分钟执行一次');
INSERT INTO `job_cron` VALUES (4, '0 0 0/1 * * ? ', '0', '每小时执行一次');
INSERT INTO `job_cron` VALUES (5, '0 0 0/3 * * ? ', '0', '每3小时执行一次');
INSERT INTO `job_cron` VALUES (6, '0 0 0/6 * * ? ', '0', '每6小时执行一次');
INSERT INTO `job_cron` VALUES (7, '0 0 0/12 * * ? ', '0', '每12小时执行一次');
INSERT INTO `job_cron` VALUES (8, '0 0 8 1/1 * ? ', '0', '每天的早上8点执行一次');
INSERT INTO `job_cron` VALUES (9, '0 0 8 1/5 * ? ', '0', '每隔五天的早上8点执行一次');
INSERT INTO `job_cron` VALUES (10, '0/1 * * * * ? ', '1', '每隔1秒执行一次');
INSERT INTO `job_cron` VALUES (11, '0/5 * * * * ? ', '0', '每隔5秒执行一次');
SET FOREIGN_KEY_CHECKS = 1;
表结构
不多BB,直接上代码
主要代码
引入依赖
1 | <dependencies> |
配置任务详情类以及触发器类
在任务启动时,查询数据库获取初始执行Cron表达式
1 | package com.ensat.config; |
更新任务执行Cron表达式
从数据库获取最新的Cron表达式
1 | package com.ensat.services; |
效果演示
初始化
访问:http:localhost:28080
从图中可以看到目前执行情况为:每秒执行一次,我们看一下控制台输出。
修改任务执行间隔
修改执行时间为:5秒执行一次。查看执行效果
可以看到新的Cron
表达式已经生效了。大功告成!
代码获取
Github: