XXL-JOB 简单使用

参考:SpringBoot整合XXL-JOB — CSDN

ip声明

本地 ip:10.11.12.254
XxlJob ip:10.11.12.202

项目

依赖:当前pom

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
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.amoros.pumpkin</groupId>
<artifactId>pumpkin-mc</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>pumpkin-mc-job</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>pumpkin-mc-job</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!--依赖acl-->
<dependency>
<groupId>com.amoros.pumpkin</groupId>
<artifactId>pumpkin-mc-acl</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>top.legendscloud</groupId>
<artifactId>spring-cloud-legends-web-starter</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- spring-cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>top.legendscloud</groupId>
<artifactId>spring-cloud-legends-common</artifactId>
</dependency>
<!--spring batch配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
</dependency>
<!-- Freemarker -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</dependency>
<!-- spring kafka -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<!-- 多数据源配置 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>
</dependencies>

<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>

</project>

依赖:父pom

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
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>top.legendscloud</groupId>
<artifactId>spring-cloud-legends</artifactId>
<version>2021.9.8-M1</version>
</parent>

<groupId>com.amoros.pumpkin</groupId>
<artifactId>pumpkin-mc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
<module>pumpkin-mc-service</module>
<module>pumpkin-mc-job</module>
<module>pumpkin-mc-api</module>
<module>pumpkin-mc-acl</module>
</modules>

<properties>
<pumpkin-mc.version>0.0.1-SNAPSHOT</pumpkin-mc.version>
<stone-spring-boot-starter-cloud.version>0.5.1-SNAPSHOT</stone-spring-boot-starter-cloud.version>
<postgresql.version>42.2.18</postgresql.version>
<xxl-job.version>2.2.0</xxl-job.version>
<dynamic-datasource-spring-boot-starter.version>3.4.1</dynamic-datasource-spring-boot-starter.version>
<ql-express.version>3.2.5</ql-express.version>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>QLExpress</artifactId>
<version>${ql-express.version}</version>
</dependency>
<dependency>
<groupId>com.amoros.pumpkin</groupId>
<artifactId>pumpkin-mc-api</artifactId>
<version>${pumpkin-mc.version}</version>
</dependency>
<dependency>
<groupId>com.amoros.pumpkin</groupId>
<artifactId>pumpkin-mc-acl</artifactId>
<version>${pumpkin-mc.version}</version>
</dependency>
<dependency>
<groupId>com.amoros.stone</groupId>
<artifactId>stone-spring-boot-starter-cloud</artifactId>
<version>${stone-spring-boot-starter-cloud.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${xxl-job.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic-datasource-spring-boot-starter.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>

</project>

yml配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# xxl-job 配置
xxl:
job:
accessToken: ''
admin:
addresses: http://10.11.12.202:8080/
executor:
address: ''
appname: pumpkin-mc-job
ip: ''
logpath: /home/amoros/logs/xxl-job/pumpkin-mc-job
logretentiondays: 30
port: 9999

XxlConfig

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
package com.amoros.pumpkin.mc.infrastructure.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

@Value("${xxl.job.admin.addresses}")
private String adminAddresses;

@Value("${xxl.job.accessToken}")
private String accessToken;

@Value("${xxl.job.executor.appname}")
private String appname;

@Value("${xxl.job.executor.address}")
private String address;

@Value("${xxl.job.executor.ip}")
private String ip;

@Value("${xxl.job.executor.port}")
private int port;

@Value("${xxl.job.executor.logpath}")
private String logPath;

@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;


@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

return xxlJobSpringExecutor;
}

}

DemoSchedule => XxlJob Handler

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
package com.amoros.pumpkin.mc.schedule;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class DemoSchedule {

@XxlJob("demoJobHandler")
public ReturnT<String> demoJobHandler(String jsonParam) {
try {
log.info("开始执行任务 demoJobHandler");
} catch (Exception e) {
log.error("demo job 异常", e);
XxlJobLogger.log("demo job 生成异常{}", e.getMessage());
return ReturnT.FAIL;
}
return ReturnT.SUCCESS;
}


}

启动SpringBoot项目

管理页面配置

登录XxlJob 管理页面

http://10.11.12.202:8080/

新增执行器

在这里插入图片描述

新增任务

在这里插入图片描述

启动,测试

此时
1、项目已经启动好
2、任务执行器、新增任务(任务Handler 和 @XxlJob 对应)
3、启动任务,查看控制台
在这里插入图片描述

手动触发一次

在这里插入图片描述

源码启动

2022-03-10 17:19:42

1、拉下来代码 https://github.com/xuxueli/xxl-job
许雪里

2、配置数据库 xxl-job-admin\src\main\resources\application.properties
在这里插入图片描述

3、创建数据库 doc\db\tables_xxl_job.sql

4、启动 xxl-job-admin

5、访问 http://localhost:8080/xxl-job-admin/
admin 123456