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 即可解决。

目录
相关文章
|
1月前
|
Java 中间件 调度
SpringBoot整合XXL-JOB【03】- 执行器的使用
本文介绍了如何将调度中心与项目结合,通过配置“执行器”实现定时任务控制。首先新建SpringBoot项目并引入依赖,接着配置xxl-job相关参数,如调度中心地址、执行器名称等。然后通过Java代码将执行器注册为Spring Bean,并声明测试方法使用`@XxlJob`注解。最后,在调度中心配置并启动定时任务,验证任务是否按预期执行。通过这些步骤,读者可以掌握Xxl-Job的基本使用,专注于业务逻辑的编写而无需关心定时器本身的实现。
37 10
SpringBoot整合XXL-JOB【03】-  执行器的使用
|
1月前
|
Java 调度 数据库
SpringBoot整合XXL-JOB【05】- 任务分片
在实际业务中,批量定时任务可能因执行时间过长影响业务。本文介绍如何使用Xxl-job对批量任务进行分片处理,通过分片广播形式调度集群机器并行执行,显著缩短任务耗时。具体步骤包括环境准备、不使用分片的代码示例、使用分片的改造方法及测试结果,展示了分片处理带来的性能提升。
37 13
|
1月前
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
42 9
|
1月前
|
Java API 调度
SpringBoot整合XXL-JOB【01】- 初识XXL-JOB
XXL-JOB 是一个分布式任务调度平台,设计目标为开发迅速、学习简单、轻量级、易扩展。它解决了分布式环境下定时任务重复执行的问题,无需额外加锁,降低了维护成本。XXL-JOB 由调度中心和执行器两部分组成,前者管理任务,后者执行具体逻辑,使代码结构更清晰。适用于多机部署场景,支持统一管理任务的启停和频率调整。
47 8
|
1月前
|
IDE Java 数据库连接
SpringBoot整合XXL-JOB【02】- 启动调度中心
本文介绍了如何初始化和配置XXL-JOB调度中心。首先,从GitHub或Gitee获取源码;接着,执行`tables_xxl_job.sql`脚本初始化数据库。然后,在IDE中打开项目并修改`application.properties`中的数据库连接和`accessToken`配置。完成配置后,启动`XxlJobAdminApplication`,访问http://localhost:8080/xxl-job-admin/进行登录。最后,简要介绍了调度中心的主要功能模块,包括运行报表、任务管理、调度日志、执行器管理和用户管理。下篇将通过实例演示如何使用XXL-JOB执行定时任务。
37 6
|
9月前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job
113 1
|
9月前
|
Java BI 调度
Spring Boot 整合xxl-job实现分布式定时任务
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 xxl是xxl-job的开发者大众点评的许雪里名称的拼音开头。
|
9月前
|
SQL Java 关系型数据库
【极光系列】springBoot集成xxl-job调度器
【极光系列】springBoot集成xxl-job调度器
99 2
|
9月前
|
监控 Java 测试技术
Spring Boot和XXL-Job:高效定时任务管理
Spring Boot和XXL-Job:高效定时任务管理
567 0
|
9月前
|
Java 调度 Docker
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)

热门文章

最新文章