定时任务-xxl-job使用指南

2024/05/14 Java

xxl-job使用

这里的内容用于总结和学习,如果希望参考官方文档,请看下方的参考资料(标注为【官方文档的链接】)

第一步:docker安装xxl-job

docker 下拉取 xxl-job 的镜像(这里使用 2.4.0 版本)

docker pull xuxueli/xxl-job-admin:2.4.0

创建映射容器的文件目录

mkdir -p -m 777 /temp/xxl-job/data/applogs

第二步:拉取源代码

只需要下载源代码中的两个文件:application.properties和tables_xxl_job.sql

源代码地址

picture not found
picture not found

第三步:修改配置文件

官方文档已经写的很详细了:

picture not found

第四步:执行SQL文件

在数据库中执行文件tables_xxl_job.sql(注意:这里执行的数据库和第三步配置文件中的数据库地址是一致的)

第五步: 创建容器

将第二步获取的配置文件application.properties放置在/temp/xxl-job文件夹下

docker run  -p 8088:8080 \
-d --name=xxl-job-admin --restart=always \
-v /temp/xxl-job/application.properties:/application.properties \
-v /temp/xxl-job/data/applogs:/data/applogs \
-e PARAMS='--spring.config.location=/application.properties' xuxueli/xxl-job-admin:2.4.0

第六步:验证是否成功

可以通过docker ps -a查看,也可以登录http://个人ip:8088/xxl-job-admin/进行访问

账号:admin 密码:123456

picture not found

OK,以上完成xxl-job的调度任务搭建

SpringBoot集成xxl-job

修改pom文件,增加依赖

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

修改配置文件application.properties

xxl.job.admin.addresses: http://个人ip:8088/xxl-job-admin   //这个ip地址不能是本地电脑哦,注册的时候无法访问你本地电脑的
xxl.job.executor.appname: media-process-service
xxl.job.executor.address:
xxl.job.executor.ip:
xxl.job.executor.port: 9999
xxl.job.executor.logpath: /data/applogs/xxl-job/jobhandler
xxl.job.executor.logretentiondays: 30
xxl.job.accessToken: 1234567890 //和前面配置的token一致即可

创建XxlJobConfig.java

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

@Slf4j
@Configuration
public class XxlJobConfig {

    @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() {
        log.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;
    }
}

在任务调度中心配置我们的执行器

打开我们部署的任务调度中心,进行如下配置

(注册方式选择自动注册即可,名称修改为自己项目的名称即可,appName修改为自己在application中配置的内容)

picture not found
picture not found

创建一个定时任务


import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

/**
 * 任务处理类
 *
 */
@Component
public class TestJob extends IJobHandler {
    /**
     * 测试任务
     */
    @Override
    @XxlJob("testHandler")
    public void execute() throws Exception {
        XxlJobHelper.handleSuccess("本次测试任务调度成功");
    }
}

如果出现调用失败

picture not found

原因很可能是因为你是本地电脑(可以尝试使用服务器telnet ip 端口号 是否能够正常链接)

参考资料

一文带你搞懂xxl-job(分布式任务调度平台) - 知乎 (zhihu.com)

分布式任务调度平台XXL-JOB (xuxueli.com)【官方文档】

Search

    Table of Contents