一、简介
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目录下脚本。
数据库导入完成后,需要修改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_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的类型 |
注意
: 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 转换类型配置
字典值 | 简述 | 说明 |
---|
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会被覆盖。