common-job 分布式任务使用

前置准备

使用 pigx-common-job 前,需要先启动 xxl-job-admin 服务,控制台负责执行器注册、任务配置和日志查看。

启动 xxl-job-admin 服务

通过 main 方法启动 PigxJobAdminApplication,服务启动后访问控制台地址:

http://ip:9080/xxl-job-admin

控制台默认账号密码为 admin/123456。仅建议本地调试使用,生产环境请及时修改默认凭据。

xxl-job-admin 控制台登录页

服务集成

添加模块依赖

在需要使用分布式任务的微服务模块中添加依赖:

<dependency>
  <groupId>com.pig4cloud</groupId>
  <artifactId>pigx-common-job</artifactId>
</dependency>

开启分布式任务能力

在启动类上添加 @EnablePigxXxlJob 注解:

@EnablePigxXxlJob
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
启用入口

只有业务服务显式添加 @EnablePigxXxlJob 后,当前微服务中的任务处理器才会被注册到 XXL-Job 执行器。

开发任务处理器

在业务 Service 中使用 @XxlJob 注解定义任务处理器:

@Service
public class JobDemoService {

    @XxlJob("demoJobHandler")
    public void demoJobHandler() {
        String param = XxlJobHelper.getJobParam();  // 获取任务参数
        int shardIndex = XxlJobHelper.getShardIndex();  // 获取分片序号

        XxlJobHelper.log("This is a demo job param.");
        XxlJobHelper.handleSuccess();
    }
}
命名要求

@XxlJob 注解中的名称是任务处理器唯一标识,控制台创建任务时需要填写相同的 JobHandler 名称。

分片参数

如果任务开启了广播分片,可通过 XxlJobHelper.getShardIndex()XxlJobHelper.getShardTotal() 获取当前分片信息,再按分片范围处理业务数据。

控制台配置

新增执行器

进入 执行器管理 页面,新增目标微服务对应的执行器。

AppName 一致

AppName 需要填写目标微服务的服务名,也就是 spring.application.name 的配置值。

XXL-Job 新增执行器
注册确认

保存执行器后通常需要等待 10 秒左右,OnLine 机器地址显示已注册实例,说明执行器已成功接入。

新增任务

进入 任务管理 页面创建任务,其中 JobHandler 对应业务代码中 @XxlJob 声明的处理器名称。

XXL-Job 任务管理列表 XXL-Job 新增任务配置
运行模式

运行模式选择 BEANJobHandler 填写 @XxlJob 注解中定义的名称,例如 demoJobHandler

使用说明

  • 控制台先创建执行器,再创建任务。
  • 执行器名称要和业务服务配置保持一致,否则任务无法路由到目标实例。
  • 任务触发后,可在 XXL-Job 控制台查看执行日志和运行结果。

参考资料

更多任务调度配置和执行器能力说明,请查看 XXL-Job 官方文档