SpringBoot 接入 XXL-Job

简介: 我们旧的定时任务是使用 Spring 自带的 `TaskExecutor` 来实现的。这种实现方式在多实例的情况下,需要进行加锁处理。否则多个实例会都执行到了同一个定时任务。这次换成 XXL-Job 主要就想更简单的解决这个问题。

〇、前言

我们旧的定时任务是使用 Spring 自带的 `TaskExecutor` 来实现的。这种实现方式在多实例的情况下,需要进行加锁处理。否则多个实例会都执行到了同一个定时任务。

这次换成 XXL-Job 主要就想更简单的解决这个问题。

一、配置

1.Maven 配置

<dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.2.0</version>
 </dependency>

2.配置文件

这里我使用的是 yaml 的配置

xxl-job:
adminAddresses: http://localhost:8100/jobaccessToken: your-tokenappName: your-app-nameip: 
port: 9090address:
logPath: /data/applogs/job/jobhandlerlogRetentionDays: 7
  • adminAddresses: 毋庸置疑,这里就是你 XXL-Job 的地址
  • accessToken:是一个简单的鉴权token,XXL-Job 在启动前加在配置文件中。同一个XXL-Job管理的所有的服务的Token都是一样的。
  • appName: 你的服务名称,需要和 XXL-Job 中配置的一致
  • port:这里的 port 可以不是你的服务端口,但是在 XXL-Job 中,不同服务的 port 不能重复。否则会报错。(详见3.1)
  • logRetentionDays: 日志存储的时间

3.XxlJobConfig

最后你需要在配置中下新建一个 XxlJobConfig.java 文件,内容如下

@Slf4j@Data@Configuration@ConfigurationProperties(prefix="xxl-job")
publicclassXxlJobConfig {
privateStringaccessToken;
privateStringadminAddresses;
privateStringappName;
privateStringip;
privateintport;
privateStringlogPath;
privateStringaddress;
privateintlogRetentionDays;
@BeanpublicXxlJobSpringExecutorxxlJobExecutor() {
log.info("xxl-job config init.");
XxlJobSpringExecutorxxlJobSpringExecutor=newXxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appName);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
returnxxlJobSpringExecutor;
    }
}
  • @ConfigurationProperties 从 yaml 配置中获取参数值
  • @Configuration 这个和其他的配置类一样


二、使用

@Slf4j@ComponentpublicclassTestJob{
@XxlJob("TestHandler")
publicReturnTtest(Stringparam) throwsException {
log.info("定时任务触发");
XxlJobLogger.log("定时任务触发");
returnReturnT.SUCCESS;
    }
}
  • @XxlJob 注解 定义了定时任务的名称,需要和 XXL-Job 后台配置的任务名称一致
  • String param XXL-Job 后台可以传入的参数,你可以传入一个 Json 串,然后在你的函数中做解析,以此达到你想要的效果。
  • ReturnT XXL-Job 函数返回格式
  • XxlJobLogger.log("") XXL-Job 自带的日志,日志会保存在 XXL-Job 中


三、常见问题

1.java.net.BindException: 地址已在使用

Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server
...
...
...
Caused by: java.net.BindException: 地址已在使用

这是因为 XXL-Job 中有其他服务使用了和你 port 配置一样的端口导致。修改配置的 port 即可解决。

目录
相关文章
|
7月前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job
79 1
|
7月前
|
Java BI 调度
Spring Boot 整合xxl-job实现分布式定时任务
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 xxl是xxl-job的开发者大众点评的许雪里名称的拼音开头。
|
7月前
|
SQL Java 关系型数据库
【极光系列】springBoot集成xxl-job调度器
【极光系列】springBoot集成xxl-job调度器
87 2
|
7月前
|
监控 Java 测试技术
Spring Boot和XXL-Job:高效定时任务管理
Spring Boot和XXL-Job:高效定时任务管理
446 0
|
7月前
|
Java 调度 Docker
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
|
7月前
|
Java 调度 Docker
Docker【应用 01】Spring Boot 项目部署在Linux环境下的Docker容器内举例(任务调度系统 xxl-job 任务调度中心)(手动版)
Docker【应用 01】Spring Boot 项目部署在Linux环境下的Docker容器内举例(任务调度系统 xxl-job 任务调度中心)(手动版)
136 0
|
SQL 监控 Java
【Spring Boot 快速入门】十七、Spring Boot 集成XXL-JOB分布式任务调度平台
【Spring Boot 快速入门】十七、Spring Boot 集成XXL-JOB分布式任务调度平台
955 0
【Spring Boot 快速入门】十七、Spring Boot 集成XXL-JOB分布式任务调度平台
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
162 1
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
104 62
|
28天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
53 2