依赖quartz框架实现定时任务的动态配置

前言

当前项目中存在大量的定时任务,当前的定时任务方案存在以下缺点:一、与业务工程耦合度太高,manager中的业务定时类越来多,二、不能集中统一配置,分散的定时表达式配置在不同的配置文件中,三、不能临时暂停、恢复定时任务,四、修改定时配置,需要重启manager。而且后续随着项目数量的增加,以及交易设计的异步化,都需要增加更多的定时任务。quartz框架比较成熟,有完整的api支持动态配置。

实现方案

任务的配置

之前纠结过是在配置文件中配置刷入到redis,还是在oracle中配置。配置文件的好处是可以和源码一起做版本管理,且redis的读取速度够快。但后来考虑了一下,定时任务的配置可以考虑成业务交易数据,版本管理的意义不大,而且任务是在系统启动后立即完成加载,基本不需要实时读取,读取速度的快慢也无所谓了,所以最后选择放到oracle中管理。

动态任务配置表结构 Alt 动态任务配置表结构

动态任务配置 Alt 动态任务配置界面

升级和新建定时任务

今后业务系统的相关定时任务都应放到对应业务系统的web工程中,在web工程的trade下新建job目录,放对应系统的定时任务类。定时类的写法与普通esb交易相同,定时任务类的请求和应答model例子为manager的com.fxbank.cip.manager.task.job包下的REQ_90000000001.REP_90000000001.java。例子对应的定时任务serviceId、sceneId为900000000、01。

定时任务类型中日期、时间分别从ESB的头中的tran_date和tran_timestamp中获取。