tim工具包-task 定时任务调度中心 分布式可配置v1.5.0版本
Posted 热心市民刘先生♛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tim工具包-task 定时任务调度中心 分布式可配置v1.5.0版本相关的知识,希望对你有一定的参考价值。
相关文章:
- v1.2 当前版本v1.2 有定时任务调度功能+D2A 动态api代理
资源下载地址 https://download.csdn.net/download/qq_29163733/20586562
定时任务
在web项目中许多情况下都需要使用到定时任务。大多数定时任务都是配置在代码中,不利于动态添加和修改。而且如果是集群模式下的定时任务则会重复执行。给他推荐自己开发的一款工具。
为什么要做此工具?
定时任务大家都会为什么要开发一款定时任务工具呢?该工具又有什么优势?
- 可配置化动态修改定时任务调度
- 支持集群模式,在有负载集群模式下不会重复执行
- 开箱即用不需要开发代码
应用包
只需执行java包即可使用简单方便
初始化sql脚本
/*
Navicat Premium Data Transfer
Source Server : 本地
Source Server Type : mysql
Source Server Version : 80019
Source Host : localhost:3306
Source Schema : mall_sys
Target Server Type : MySQL
Target Server Version : 80019
File Encoding : 65001
Date: 13/04/2020 20:06:38
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_task
-- ----------------------------
DROP TABLE IF EXISTS `sys_task`;
CREATE TABLE `sys_task` (
`ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'ID',
`DES` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
`URL` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'URL',
`PARAM` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数',
`T_GROUPS` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分组',
`T_CODE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编码',
`C_TIME` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`CREATER` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`IS_OPEN` int(0) NULL DEFAULT NULL COMMENT '是否启用',
`TASK_TIME` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务执行时间',
`TASK_TYPE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务类型',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统定时任务信息表SYS_TASK' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_task
-- ----------------------------
INSERT INTO `sys_task` VALUES ('1', '测试', 'http://www.baidu.com', 'a=1', 'test', 'test', '2020-04-13 19:39:52', '1', 1, '0 * * * * ? *', 'dev');
-- ----------------------------
-- Table structure for sys_task_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_task_log`;
CREATE TABLE `sys_task_log` (
`ID` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'ID',
`T_GROUPS` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分组',
`T_CODE` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编码',
`TASK_STATUS` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务状态',
`DES` varchar(4000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
`C_TIME` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
`START_TIME` datetime(0) NULL DEFAULT NULL COMMENT '开始时间',
`END_TIME` datetime(0) NULL DEFAULT NULL COMMENT '结束时间'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统定时任务执行日志表SYS_TASK_LOG' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_task_log
-- ----------------------------
SET FOREIGN_KEY_CHECKS = 1;
DROP TABLE IF EXISTS `task_lock`;
CREATE TABLE task_lock(
id VARCHAR(60) NOT NULL COMMENT 't_groups+t_code+日期yyyymmdd;分布式锁' ,
ip VARCHAR(60) COMMENT '执行服务器的ip地址' ,
PRIMARY KEY (id)
) COMMENT = '分布式锁'
1. 可配置化动态修改定时任务调度
如何动态配置定时任务调度的呢?
在初始化sql脚本中会创建两张表,sys_task 为定时任务sys_task_log 为日志记录
- 项目里将需要调用的内容设置为api接口,url则为接口。
- param为参数
- task_time 是cron 时间配置公式
- task_type 为运行环境 prod 为正式环境的参数 与配置文件application-host.properties中的system.env 对应,生产调用生产定时任务,测试调用测试
2.支持集群模式,在有负载集群模式下不会重复执行
当前添加了时间维度的分布式锁,可支持在分以上的维度进行事务锁。支持多台部署
当我们项目处在集群中,应用配置了定时任务,就会出现每个服务都会启动定时任务,则会出现重复执行。
按照上图设计,将服务设置为接口,经过负载调用。负载则只会调用到一个服务,避免了出现重复执行
3.开箱即用不需要开发代码
我们只需要将配置文件与 tim-task-0.0.1-SNAPSHOT.jar 放在同一个文件夹执行即可使用
- 执行命令
nohup java -jar -Dfile.encoding=UTF-8 tim-task-0.0.1-SNAPSHOT.jar >task.out 2>&1 &
配置文件
#数据库配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dbname?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=password
#区分环境,与数据库表中的task_type 对应
system.env=dev
## 是否开启整个定时任务
system.isOpenTask=1
server.port=18089
重新刷新
curl 127.0.0.1:18089/start
每隔一分钟检测配置表是否有变化,如有变化则刷新数据
停止所有
curl 127.0.0.1:18089/stop
调用日志
注意
被调用服务url返回接口 按照结构返回,0000为成功,其他报错可将报错日志放入msg中,报错内容可将数据放入data中
{"msg":"成功","code":"0000","data":"成功"}
以上是关于tim工具包-task 定时任务调度中心 分布式可配置v1.5.0版本的主要内容,如果未能解决你的问题,请参考以下文章
tim工具包-task 定时任务调度中心 分布式可配置v1.5.0版本