xxl-job源码中,有意减少了对第三方框架的依赖,使得它有很高的适用性,可以被各种历史应用所兼容,无论这些应用基于什么框架而开发的。
Springboot是Java企业级应用开发中,极其常用的框架;xxl-job是常见的分布式调度框架。这两者是如何整合的呢?
其实,xxl-job源码中默认提供了与Springboot集成的实现:XxlJobSpringExecutor。今天,我们一起来看看其中细节。
一 启动类XxlJobExecutor
XxlJobExecutor类有以下功能:
- 封装了执行器配置,如调度平台地址、ip、port等
- 提供了start方法
- 提供了stop方法
那么,已有应用要集成xxl-job,至少得做这两件事:
- 提供执行器配置
- 在应用中创建XxlJobExecutor对象,启动时调用start,停止时调用stop
二 Springboot集成xxl-job
源码中XxlJobSpringExecutor是XxlJobExecutor的子类,是与springboot集成的具体实现。创建XxlJobExecutor实例并交由spring管理,就完成了集成。
当然,不同版本在实现上有一些差异。
2.1 各版本相同点
Springboot项目使用xxl-job时,都应创建配置类,且创建XxlJobExecutor(或其子类)实例,回调start方法。如源码中提供的实例:
2.2 各版本间差异
1.7.0版本
使用@ImportResource导入配置文件。
在xml中定义了
XxlJobExecutor的bean对象,指定init-method、destroy-method。
2.1.2版本
XxlJobSpringExecutor实现了InitializingBean接口,在afterPropertiesSet方法中执行start逻辑。
又实现了DisposableBean接口,在bean销毁时执行stop动作。
2.4.0版本
从实现InitializingBean接口,改为实现SmartInitializingSingleton接口。在afterSingletonsInstantiated方法中执行了start逻辑。
其他做法
由于xxl-job开源,企业可修改源码进行封装。如下这种方式,通过@Bean的 initMethod、destroyMethod属性,在bean的生命周期中完成对start、stop的回调。
此时
XxlJobSpringExecutor类不再实现InitializingBean或SmartInitializingSingleton接口。
这种做法其实与1.7.0版本相似,只是基于注解罢了。