XXL-JOB部署及使用

官网

github:https://github.com/xuxueli/xxl-job

offical-website:http://www.xuxueli.com/xxl-job/

简介

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

Kubernetes方式安装

修改其中<namespace-name><mysql-username><mysql-password><mysql-url><xxl-job-accesstoken><xxl-job-admin-outside-port>的内容。其中<mysql-username><mysql-password><xxl-job-accesstoken>的内容需要进行Base64编码;<xxl-job-admin-outside-port>为XXL-JOB-ADMIN服务向外暴露端口,Kubernetes默认可向外暴露端口范围为30000-32767。

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
---
# secret for xxl-job-admin-server
kind: Secret
apiVersion: v1
metadata:
name: secret-xxl-job-admin-server
namespace: <namespace-name>
labels:
app: secret-xxl-job-admin-server
data:
datasource_username: <mysql-username>
datasource_password: <mysql-password>
xxl_job_accesstoken: <xxl-job-accesstoken>
type: Opaque
---
# headless service for xxl-job-admin
kind: Service
apiVersion: v1
metadata:
name: service-xxl-job-admin-server-headless
namespace: <namespace-name>
labels:
app: service-xxl-job-admin-server-headless
spec:
ports:
- protocol: TCP
port: 8080
targetPort: 8080
selector:
app: xxl-job-admin-server
type: ClusterIP
clusterIP: None
sessionAffinity: ClientIP
---
# service for xxl-job-admin
kind: Service
apiVersion: v1
metadata:
name: service-xxl-job-admin-server
namespace: <namespace-name>
labels:
app: service-xxl-job-admin-server
spec:
ports:
- protocol: TCP
port: 8080
targetPort: 8080
nodePort: <xxl-job-admin-outside-port>
selector:
app: xxl-job-admin-server
type: NodePort
sessionAffinity: ClientIP
---
# statefulset for xxl-job-admin
kind: StatefulSet
apiVersion: apps/v1
metadata:
name: statefulset-xxl-job-admin-server
namespace: <namespace-name>
labels:
app: xxl-job-admin-server
spec:
serviceName: service-xxl-job-admin-server-headless
replicas: 3
selector:
matchLabels:
app: xxl-job-admin-server
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: xxl-job-admin-server
spec:
# 亲和性定义
affinity:
# 非亲和性策略
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- xxl-job-admin-server
topologyKey: kubernetes.io/hostname
containers:
- name: container-xxl-job-admin-server
image: 'xuxueli/xxl-job-admin:2.3.0'
ports:
- containerPort: 8080
protocol: TCP
# 环境变量
env:
- name: SPRING_DATASOURCE_URL
value: "<mysql-url>"
- name: SPRING_DATASOURCE_USERNAME
valueFrom:
secretKeyRef:
name: secret-xxl-job-admin-server
key: datasource_username
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: secret-xxl-job-admin-server
key: datasource_password
- name: XXL_JOB_ACCESSTOKEN
valueFrom:
secretKeyRef:
name: secret-xxl-job-admin-server
key: xxl_job_accesstoken
# 存活探针
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 120
periodSeconds: 10
# 就绪探针
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
# 镜像拉取策略
imagePullPolicy: IfNotPresent
# 重启策略
restartPolicy: Always

服务访问

直接访问XXL-JOB-ADMIN服务对外的端口,账号密码默认为:admin/123456
访问界面截图:

SpringBoot中使用

1. 引入依赖

注意版本强烈建议和部署的服务版本一致

1
2
3
4
5
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${xxl-job.version}</version>
</dependency>

2. 修改SpringBoot配置文件(application.yml或application.properties)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses = http://<IP:PORT>/xxl-job-admin
## 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken = <xxl-job-accesstoken>
# xxl-job执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname = <executor-xxx>
## 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port = 9999
## 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address =
## 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip =
## 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath = log/xxl-job/jobhandler
## 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays = 30

3. 使用注解@XxlJob("<executor-xxx>")执行定时任务逻辑

1
2
3
4
5
6
7
8
9
@Component
public class DemoXxlJob {

@XxlJob("<executor-xxx>")
public ReturnT<String> demoJobHandler(String param) throws Exception {
//TODO 具体的定时任务逻辑
return ReturnT.SUCCESS;
}
}

(•̀ᴗ•́)و ̑̑

Share