springboot2 xxl-job 调度中心
1,下载自己需要的版本
1,https://github.com/xuxueli/xxl-job
2,https://gitee.com/xuxueli0323/xxl-job/releases (墙内推荐)
3,墙内网络推荐使用第二个地址,笔者下 2.2.0 版本
2,整合到自己的项目
将下载好的项目中 xxl-job-admin 拷贝到自己的 springcloud 项目中
创建相应的数据库并执行脚本:xxl-job\doc\db\tables_xxl_job.sql
1,修改 pom 文件依赖
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.hwq</groupId>
<artifactId>sc-xxl-job-admin</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<dependencies>
<!-- WEB 组建 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 模板组建 Freemarker -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- 邮件组建 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 项目健康健康 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 数据库 MySQL 连接依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 数据持久化框架 MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<!-- 调度核心依赖 -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.2.0</version>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 打包后名称 -->
<finalName>sc-xxl-job-admin</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2,修改配置文件参考
application.yml
server:
# 端口
port: 1081
# Servlet 访问项目名
servlet:
context-path: /xxl-job-admin
spring:
mvc:
servlet:
# 加载 DispatcherServlet 的启动优先级
load-on-startup: 0
# 接管的静态资源路由规则
static-path-pattern: /static/**
resources:
# 静态资源路径
static-locations: classpath:/static/
freemarker:
# 模板地址
template-loader-path: classpath:/templates/
# 模板后缀
suffix: .ftl
# 字符编码
charset: UTF-8
# HTTP 请求对象的对象名称
request-context-attribute: request
settings:
number_format: 0.##########
# 数据源
datasource:
url: jdbc:mysql://192.168.200.100:3306/xxljob
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 920619
# 邮件配置
mail:
host: smtp.163.com
port: 25
username: 17600909499@163.com
password: FYZOEDLNWIHRBTQY
mybatis:
# XML 映射地址
mapper-locations: classpath:/mybatis-mapper/*Mapper.xml
xxl:
job:
# 鉴权值
accessToken: huangweiqiang
# 语言包: zh_CN 中文、zh_TC 台湾、en 英文
i18n: zh_CN
# 触发池最大值
triggerpool:
fast:
max: 200
slow:
max: 100
# 日志保留日(单位:天)
logretentiondays: 30
# 健康检查
management:
server:
servlet:
context-path: /actuator
health:
mail:
enabled: false
3,运行,访问
1,访问地址:192.168.200.100:1081/xxl-job-admin
2,默认的账号密码:admin/123456
3,执行器配置
pom 依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</dependency>
配置文件
xxl:
job:
admin:
# 调度中心服务端地址
addresses: http://127.0.0.1:1081/xxl-job-admin
# 鉴权值
accessToken: huangweiqiang
executor:
# 执行器的名称
appname: ${spring.application.name}
# 执行器的 IP
ip: ${spring.cloud.client.ip-address}
# 执行器的 端口
port: 2121
# 执行器日志的保存路径
logpath: ${user.dir}/z-file/logging/${spring.application.name}/job
# 执行日志的保存时间
logretentiondays: 30
在方法上添加 @XxlJob 注解就变成了执行器
package com.hwq.admin.back.executor;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hwq.common.model.dto.TestDTO;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TestExecutor {
@Autowired
private ObjectMapper objectMapper;
@XxlJob("test/test1")
public ReturnT<String> test1(String param) throws JsonProcessingException {
TestDTO testDTO = objectMapper.readValue(param, TestDTO.class);
System.out.println(testDTO);
return new ReturnT<>(ReturnT.SUCCESS_CODE, "调度执行成功");
}
@XxlJob("test/test2")
public ReturnT<String> test2(String param) throws JsonProcessingException {
TestDTO testDTO = objectMapper.readValue(param, TestDTO.class);
System.out.println(testDTO);
return new ReturnT<>(ReturnT.SUCCESS_CODE, "调度执行成功");
}
}
4,页面配置
1,添加执行器
2,添加任务
3,配置串行任务的思路
在日常开发中,我们的调度所需的数据来源可能会依赖另一个调度的结果,这是我们一般会采取两种解解决方式:
1,估算依赖调度的执行时间,将调度时间配置到依赖调度执行完成后的时间
2,将调度作为依赖调度的子任务,配置串行任务
从上图的配置我们可以看出,xxl-job 是支持配置串行任务的
具体配置思路:将一个调度作为另一个调度的子任务,任意填写一个 cron,然后状态设置为停止