docker搭建xxl-job分布式任务调度系统

  |  

介绍

XXL-JOB 是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

安装

  1. 拉取镜像

docker pull xuxueli/xxl-job-admin:2.4.0

  1. 准备
    (1) 在 mysql 中执行 sql 文件,初始化表结构
    sql 文件链接

  2. 创建容器

1
2
3
4
5
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://172.17.0.2:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456 --xxl.job.accessToken=sdfadfqaerqwrqewreqwrqxfg" \
-p 8080:8080 \
-v /root/docker/xxl-job-admin:/data/applogs \
--name xxl-job-admin \
-d xuxueli/xxl-job-admin:2.4.0
  1. 登录http://127.0.0.1:8080/xxl-job-admin
    默认用户名 admin 密码 123456

使用

  1. 依赖引入
1
2
3
4
5
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
  1. 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#xxl-job
xxl:
job:
# xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
# 配置刚刚启动的xxl-job-admin地址,他会自动注册到xxl-job-admin
admin-addresses: http://127.0.0.1:8080/xxl-job-admin
# 执行器通讯TOKEN [选填]:非空时启用;
access-token: sdfadfqaerqwrqewreqwrqxfg
# 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
app-name: xxl-job-demo
# 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
address:
# 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
ip:
# 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
port: 9999
# 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
log-path:
# 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
log-retention-days: 30
  1. 读取配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.klover.xxl.job;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
* XxlJobProperties
*
* @author klover
* @date 2024/4/7 20:09
*/
@Data
@ConfigurationProperties(prefix = "xxl.job")
public class XxlJobProperties {
private String adminAddresses;
private String accessToken;
private String appName;
private String address;
private String ip;
private int port;
private String logPath;
private int logRetentionDays;
}
  1. 创建自动注册到 admin 管理平台的执行器 OnLine 机器地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.klover.xxl.job.config;

import com.klover.xxl.job.XxlJobProperties;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* XxlJobConfig
*
* @author klover
* @date 2024/4/7 20:13
*/
@Slf4j
@EnableConfigurationProperties(XxlJobProperties.class)
@Configuration
public class XxlJobConfig {
@Resource
private XxlJobProperties properties;

@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(properties.getAdminAddresses());
xxlJobSpringExecutor.setAppname(properties.getAppName());
xxlJobSpringExecutor.setAddress(properties.getAddress());
xxlJobSpringExecutor.setIp(properties.getIp());
xxlJobSpringExecutor.setPort(properties.getPort());
xxlJobSpringExecutor.setAccessToken(properties.getAccessToken());
xxlJobSpringExecutor.setLogPath(properties.getLogPath());
xxlJobSpringExecutor.setLogRetentionDays(properties.getLogRetentionDays());

return xxlJobSpringExecutor;
}
}
  1. 执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.klover.xxl.job.jobs;

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
* TestJob
*
* @author klover
* @date 2024/4/9 9:58
*/
@Slf4j
@Component
public class TestJob {
/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("testJobHandler")
public String testJobHandler() {
// 获取xxl job 参数
String param = XxlJobHelper.getJobParam();
log.info("XXL-JOB, Hello World. param:{}", param);
System.out.println(param);
return "SUCCESS";
}
}
  1. 配置

在这里插入图片描述

在这里插入图片描述

文档

Docker 镜像方式搭建调度中心

文章目录
  1. 1. 介绍
  2. 2. 安装
  3. 3. 使用
  4. 4. 文档