Springboot如何集成xxl-job

906 阅读2分钟

xxl-job源码中,有意减少了对第三方框架的依赖,使得它有很高的适用性,可以被各种历史应用所兼容,无论这些应用基于什么框架而开发的。

Springboot是Java企业级应用开发中,极其常用的框架;xxl-job是常见的分布式调度框架。这两者是如何整合的呢?

其实,xxl-job源码中默认提供了与Springboot集成的实现:XxlJobSpringExecutor。今天,我们一起来看看其中细节。

一 启动类XxlJobExecutor

XxlJobExecutor类有以下功能:

  • 封装了执行器配置,如调度平台地址、ip、port等 image.png
  • 提供了start方法 image.png
  • 提供了stop方法 image.png

那么,已有应用要集成xxl-job,至少得做这两件事:

  • 提供执行器配置
  • 在应用中创建XxlJobExecutor对象,启动时调用start,停止时调用stop

二 Springboot集成xxl-job

源码中XxlJobSpringExecutorXxlJobExecutor的子类,是与springboot集成的具体实现。创建XxlJobExecutor实例并交由spring管理,就完成了集成。

当然,不同版本在实现上有一些差异。

2.1 各版本相同点

Springboot项目使用xxl-job时,都应创建配置类,且创建XxlJobExecutor(或其子类)实例,回调start方法。如源码中提供的实例: image.png image.png

2.2 各版本间差异

1.7.0版本

使用@ImportResource导入配置文件。 image.png 在xml中定义了XxlJobExecutor的bean对象,指定init-method、destroy-method。 image.png

2.1.2版本

XxlJobSpringExecutor实现了InitializingBean接口,在afterPropertiesSet方法中执行start逻辑。 image.png image.png

又实现了DisposableBean接口,在bean销毁时执行stop动作。 image.png

2.4.0版本

从实现InitializingBean接口,改为实现SmartInitializingSingleton接口。在afterSingletonsInstantiated方法中执行了start逻辑。 image.png

其他做法

由于xxl-job开源,企业可修改源码进行封装。如下这种方式,通过@Bean的 initMethod、destroyMethod属性,在bean的生命周期中完成对start、stop的回调。 image.png 此时XxlJobSpringExecutor类不再实现InitializingBeanSmartInitializingSingleton接口。 image.png 这种做法其实与1.7.0版本相似,只是基于注解罢了。