wno_quartz微型分布式定时任务管理器

一、简介

wno_quartz是一个微型的定时任务管理器,我们在实际的项目中存在各种定时任务的维护,特别是牵扯到实际业务逻辑的时候,需要单独写对应的java方法,特别是对于相同处理逻辑的也需要写多个方法,随着时间的推移,这样会严重增加我们的项目维护成本,可以设想下我们项目维护几百个,甚至上千个定时器的时候,这将会是一件很崩溃的事情。此定时器管理框架就是为了解决这个问题,所有定时器可以使用定时器进行灵活管控,减少我们修改代码等带来的风险和维护成本。目前项目中已经可以进行以下场景的灵活配置:

1.sendData->transData 数据到数据库的操作、转储等。
2.sendFtp->sendDataFtp/sendDataSFtp 数据库到ftp/sftp
3.sendFtp->sendDataToFile 数据库到文件
4.httpTask->httpSend 数据库到HTTP接口
5.shellTask->exceCmd linux服务器到数据库
6.groovyTask->groovyDeal 脚本解析(接口、ftp等)到数据库
7.queueTask->msgSend 数据库到队列

后续各种场景会逐渐丰富,也期待您的加入~~~~

1.1 技术栈

框架 技术 版本
核心框架 Spring Boot 2.5.6
持久层框架 jdbctemplate 5.3.12
数据库连接池 Alibaba Druid 1.1.10
定时器框架 Quartz 2.3.2
模板解析 Groovy 3.0.9
json解析 fastjson2 2.0.12
Xquery解析 Saxon-HE 11.3
ssh jsch 0.1.55

Quartz使用可以参考 《Spring-Boot整合Quartz》。可以自动组成集群、持久化等优点。

1.2 部署手册

1.2.1 数据初始化

目前平台支持MySql\Oracle\PostgreSQL\teldb版本,只需要修改数据源配置亦可。具体脚本见: resources/sql目录下脚本。 数据库导入完成后,需要修改数据源地址,wno704.quartzDB属性信息;为了防止对数据库污染,表前缀可以根据自己情况变动,需要配置wno704.tablePrefix,同时修改导入脚本中表前缀,目前默认为QRTZ_;日志目录需要配置wno704.logDir。

1.2.2 编译构件

传统的springboot项目,目前生成物为jar包,如需要war,请参考《Spring-Boot项目创建》

1.2.3 服务部署

发布到服务器后,执行java -jar jar包名称,快捷部署可以参考 《Linux下部署Spring-Boot-jar》

1.2.4 JOB基础配置说明

字段 说明
JOB_ID 任务id
BEAN_NAME spring bean名称,对应定时任务的配置类
METHOD_NAME 方法名,对应定时任务的配置类中的方法
PARAMS 参数,普通定时任务可以使用,不需要获取附带参数的定时任务
CRON_EXPRESSION cron表达式
START_TIME 开始执行时间
END_TIME 结束执行时间
STATUS 任务状态 0:正常 1:暂停 2:删除
UPDATE_STATUS 加载状态 0:未加载 1:已加载,如若修改以上字段,需要修改状态为未加载状态,后台读取后,自动修改为已加载状态。
REMARK 备注
CREATE_TIME 创建时间

1.2.5 DS基础配置说明

字段 说明
SOURCE_ID 数据源id
TYPE 类型,目前支持MySQL Oracle PostgreSQL类型
JDBCTEMPLATE_NAME jdbc名称
DRIVER_CLASS_NAME jdbc驱动class
URL 数据库链接字符串
USERNAME 数据库帐号
PASSWORD 数据库密码
DB_DESC 数据源描述
STATUS 可用状态 0使用 1下线
CONFIG 其他配置,多个配置换行,属性名称和值用:隔开
CREATE_TIME 创建时间
READ_TIME 读取时间

注意:如果修改了数据库等配置,需要修改CREATE_TIME为当前时间,定时器读取了后,会自动更新READ_TIME字段。

二、数据转储-sendData->transData

2.1 数据库配置参数

字段 说明
TRANS_TYPE 转换类型
TEMPLATE_SRC_NAME 数据源A
TEMPLATE_DST_NAME 目标源B
TEMPLATE_DST_TWO_NAME 数据源C
SRC_COMMD 数据源A脚本
DST_COMMD 数据源B脚本
DST_TWO_COMMD 数据源C脚本

2.2 转换类型配置

字典值 简述 说明
1 A查询-B操作 需要把A数据库的结果在B库里面操作(删除、新增、更新、执行存过) 【B库和A库可以为同一个库】
2 A操作 或 B操作或 C操作 需要在某一个数据库,或者多个数据库单独执行删除、修改、新增等操作,包括执行存储过程
3 A查询-B操作 需要把A数据库的结果在B库里面操作(删除、新增、更新、执行存过) 【B库和A库可以为同一个库】
4 A查询-B查询-C操作 需要把A数据库的结果在B库里作为条件查询,然后在被B库查询结果在C库里面操作(删除、新增、更新、执行存过) 【B库和A库、C库可以为同一个库】
5 A查询-B操作-C操作 需要把A数据库的结果在B库里面、同时也在C库操作(删除、新增、更新、执行存过) 【B库和A库、C库可以为同一个库】
6 A操作-B查询-C操作 B查询结果插入到C库之前,执行了操作A,一般用于避免重复数据转储的情况
7 A查询-C操作 B查询-C操作 A查询结果插入到C库,紧接着B库查询结果同样更新C库,一般用于多库关联更新的情况
8 A查询-B操作-C操作 A查询结果插入到B库,结束之后在C库单独执行自己的脚本,和6互逆,一般用于数据转储完成后,需要及时做计算或者更新的情况

三、ftp/sftp文件传送-sendFtp->sendDataFtp/sendDataSFtp

3.1 数据库配置参数

字段 说明
TRANS_TYPE 生成文件是否需要增加文件头,1:需要增加, 非0\1:不增加文件头
TEMPLATE_SRC_NAME 数据源
TEMPLATE_DST_NAME ftp/sftp服务器 地址和端口,中间用冒号隔开
TEMPLATE_DST_TWO_NAME ftp/sftp服务器 帐号和密码,中间用冒号隔开
SRC_COMMD 数据源A脚本,查询结果必须包含dat,srcpath,dstpath三个字段,具体说明如下
DST_COMMD 文件标题,是否加载由TRANS_TYPE决定
DST_TWO_COMMD 生成文件字符编码gb2312 utf-8

3.2 生成文件格式说明

字段 说明
dat 生成文件每一行的内容,拼接等需要自行拼接
srcpath 生成文件在定时器服务器上的存档的全路径,包括文件名称,文件夹需要提前创建好。
dstpath 远端ftp/sftp文件的文件夹路径,文件夹需要提前创建好。

四、数据转储-sendFtp->sendDataToFile

4.1 数据库配置参数

字段 说明
TRANS_TYPE 生成文件是否需要增加文件头,1:需要增加, 非0\1:不增加文件头
TEMPLATE_SRC_NAME 数据源
SRC_COMMD 数据源A脚本,查询结果必须包含dat,srcpath两个字段,具体说明可以参考3.2
DST_COMMD 文件标题,是否加载由TRANS_TYPE决定
DST_TWO_COMMD 生成文件字符编码gb2312 utf-8

五、数据传送-httpTask->httpSend

5.1 数据库配置参数

字段 说明
TRANS_TYPE 地址请求方式,2:GET, 1:POST
TEMPLATE_SRC_NAME 请求报文数据源
TEMPLATE_DST_NAME http或者https请求地址
TEMPLATE_DST_TWO_NAME 结果保存数据源
SRC_COMMD 请求报文数据源脚本,结果必须包含id,msg两个字段
DST_COMMD 请求头,每个请求头必须用换行隔开,请求头和具体的值需要用竖线隔开
DST_TWO_COMMD 结果保存数据源脚本,脚本参数必须是报文在前,主键在后

六、shell脚本执行-shellTask->exceCmd

6.1 数据库配置参数

字段 说明
TRANS_TYPE 地址请求方式,2:结果不入库, 1:结果入库,需要配置TEMPLATE_SRC_NAME和
TEMPLATE_SRC_NAME 结果保存数据源
TEMPLATE_DST_NAME 服务器ssh 地址和端口,中间用冒号隔开
TEMPLATE_DST_TWO_NAME 服务器ssh 帐号和密码,中间用冒号隔开
SRC_COMMD 结果保存数据源脚本,脚本参数必须是报文在后,IP在前
DST_COMMD 需要执行的shell脚本

七、groovy脚本执行-groovyTask->groovyDeal

7.1 数据库配置参数

字段 说明
TRANS_TYPE 转换类型
TEMPLATE_SRC_NAME 数据源A
TEMPLATE_DST_NAME 目标源B
TEMPLATE_DST_TWO_NAME 数据源C
SRC_COMMD 数据源A脚本
DST_COMMD 数据源B脚本
DST_TWO_COMMD 数据源C脚本

7.2 转换类型配置

字典值 简述 说明
1 A数据库-GroovyB A库查询结果,通过Groovy处理
2 A数据库-GroovyB-A数据库 A库查询结果,通过Groovy处理,然后更新C库 【A库和C库可以为同一个库】
3 GroovyA-B数据库 通过Groovy处理,结果更新B库,和1互逆。
4 通过Groovy处理--更新B/C库 通过Groovy处理,结果更新B/C库 【B库和C库可以为同一个库】
5 GroovyA/GroovyB/GroovyC GroovyA处理、GroovyB处理、GroovyC处理
6 通过GroovyA处理-更新B库-通过GroovyC处理 GroovyA结果返回 List<Map<String, Object>>,迭代查询B库,B库结果返回List<Map<String, Object>>,提供给GroovyC处理
7 A库处理-GroovyB执行-更新C库 一般用于定期通过grovvy解析后更新全表数据,类似与sendData->transData第6的类型

注意: 1.Groovy脚本只需要配置脚本字段,不需要配置数据源字段。Groovy脚本下一环节是入库动作,必须返回List<Object[]>作为数据库脚本的入参。
2.引入工具类参考 https://wno704.cn/wno_util/

八、数据库推送队列-queueTask->msgSend

8.1 数据库配置参数

字段 说明
TRANS_TYPE 类型,1.KAFKA 2.CTGMQ 3.RabbitMQ 4.ActiveMQ 5.RocketMQ
TEMPLATE_SRC_NAME 数据源A
TEMPLATE_DST_NAME 队列名称
TEMPLATE_DST_TWO_NAME 结果数据源C
SRC_COMMD 数据源A脚本
DST_COMMD 主题或者为空,为空默认使用脚本主题
DST_TWO_COMMD 结果数据源C脚本

注意:如果结果数据源C脚本未配置,则队列请求结果不会保存入库。

8.2 转换类型配置

字典值 简述 说明
1 A数据库-KAFKA-C数据库 A库查询结果,msg字段为推送内容,topic字段为定义主题,partition字段为分片,id字段为主键,用于结果入库使用
2 A数据库-CTGMQ-C数据库 A库查询结果,msg字段为推送内容,sourcename字段为实际请求方法中的sourcename,id字段为主键
3 A数据库-RabbitMQ-C数据库 A库查询结果,msg字段为推送内容,routingKey字段为实际请求方法中的routingKey,id字段为主键
4 A数据库-ActiveMQ-C数据库 A库查询结果,msg字段为推送内容,destinationName字段为实际请求方法中的destinationName,id字段为主键
5 A数据库-RocketMQ-C数据库 A库查询结果,msg字段为推送内容,topic字段为定义主题,tags字段为实际请求方法中的tags,id字段为主键

注意: 如果DST_COMMD脚本配置了,则脚本中的topic、sourcename、routingKey、destinationName会被覆盖。

posted @ 2026-02-10 17:30  wno704  阅读(20)  评论(0)    收藏  举报