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版本

tim工具包-task 定时任务调度中心 分布式可配置v1.5.0版本

Spring调度定时任务的方式

《分布式_Job》——定时XXL_JOB_使用总结

Spring task定时任务

LTS原理--轻量级分布式任务调度框架(Light Task Schedule)