起因
据了解,项目一开始使用quartz,在代码中配置定时任务,不利于管理,每次修改任务都要重新修改代码然后发布,不利于维护,于是考虑应用调度框架。
框架选型
据了解,当时选择调度框架有几点考虑:要能够快速和系统无缝链接,上手快,配置简单,可以分布式部署,有管理平台。现在版本支持,文档丰富,并且期望原有项目改动较小、调研了xxl-job、elastic-job、Its,最终同事选用xxjob。
xxl-job结合项目搭建
xxl-job-admin是注册中心,xxl-jon-core是依赖核心包,executor是执行器
步骤
修改数据库为项目地址
xxljob数据库
再i修改执行器的配置文件,主要有端口和注册中心的地址
改进
据了解,由于当时系统已经是微服务架构,每个微服务已经是一个执行器,在服务启动时不仅仅可以向eureka服务器端注册,还可以向xxl-job的管理平台注册,端口可以不同。因为xxljob给我们提供了这个功能,具体可以参照官方文档
这样做可以更少地修改自己的服务项目。于是按照文档指示,添加xxl-job-core的依赖后面同事写了一个配置类XxlJobInfoConfig,服务引入XxlJobInfoConfig所在的项目依赖,服务启动时读取服务的相关信息注册到xxl admin上,RESTful api调用,大致的过程就是读取服务名称、ip等作为XxlJobSpringExecutor并返回bean信息
自动注册大概是这样的过程
最后说下各job的注册,也是在服务启动onApplicationEvent进行的。我们的job都继承了AbstractScheduleJob
后面我也尝试搭建xxljob,把源码down下来后,准备部署到自己的云服务器上,后面不了了之了,还是有点遗憾,过程中肯定会遇到很多问题。希望后面有机会在工作上让自己来搭建吧,问题不大,这篇也可以供参考。也希望能帮到大家。