一、简介

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 Boot2.5.6
持久层框架jdbctemplate5.3.12
数据库连接池Alibaba Druid1.1.10
定时器框架Quartz2.3.2
模板解析Groovy3.0.9
json解析fastjson22.0.12
Xquery解析Saxon-HE11.3
sshjsch0.1.55

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

1.2 部署手册

1.2.1 数据初始化

目前平台支持MySql\Oracle\PostgreSQL\teldb版本,只需要修改数据源配置亦可。具体脚本见: resources/sql目录下脚本。
数据库导入完成后,需要修改quartz数据源地址,wno704.quartzDB属性信息,其他数据源可以根据实际裁剪,具体配置见 1.2.5 数据源配置说明。

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_NAMEspring bean名称,对应定时任务的配置类
METHOD_NAME方法名,对应定时任务的配置类中的方法
PARAMS参数,普通定时任务可以使用,不需要获取附带参数的定时任务
CRON_EXPRESSIONcron表达式
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_NAMEjdbc名称
DRIVER_CLASS_NAMEjdbc驱动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 转换类型配置

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

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

3.1 数据库配置参数

字段说明
TRANS_TYPE生成文件是否需要增加文件头,1:需要增加, 非0\1:不增加文件头
TEMPLATE_SRC_NAME数据源
TEMPLATE_DST_NAMEftp/sftp服务器 地址和端口,中间用冒号隔开
TEMPLATE_DST_TWO_NAMEftp/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_NAMEhttp或者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 转换类型配置

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

注意: Groovy脚本只需要配置脚本字段,不需要配置数据源字段。Groovy脚本下一环节是入库动作,必须返回List<Object[]>作为数据库脚本的入参。

八、数据库推送队列-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 转换类型配置

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

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