xxl-job 分布式任务调度

Spring Cloud 微服务系列文章,点击上方合集↑

1. xxl-job介绍

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

简单的说就是特定时间完成特定任务,比如每天早上9:00定时发送营销短信给每个客户。

官网地址:https://www.xuxueli.com/xxl-job

2. xxl-job 安装

2.1 下载源码

# 下载源码
git clone https://gitee.com/xuxueli0323/xxl-job

cd xxl-job

# 切换分支
git checkout 2.4.0

2.2 初始化数据库脚本

脚本位置在 /doc/db/tables_xxl_job.sql,执行sql生成xxl_job库,有如下表:

xxl-job 分布式任务调度

2.3 修改配置文件

1)application.properties

xxl-job-admin/src/main/resources/application.properties

server.port=18080

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

xxl.job.accessToken=default_token
  • 这里将默认端口8080改为18080。
  • 数据库连接信息
  • 访问token

2)logback.xml

xxl-job-admin/src/main/resources/logback.xml

修改日志存放位置

<property name="log.path" value="/路径/log/xxl-job-admin.log"/>

2.4 Maven编译打包

mvn install -Dmaven.test.skip=true

打好的jar包位置 /xxl-job-admin/target/xxl-job-admin-2.4.0.jar

2.5 运行

cd xxl-job-admin/target

# 运行jar包
java -jar xxl-job-admin-2.4.0.jar

访问地址 http://localhost:18080/xxl-job-admin/toLogin

默认登录账号 admin/123456xxl-job 分布式任务调度

3. SpringBoot集成xxl-job

3.1 pom.xml

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

3.2 application.properties

# 应用名称
spring.application.name=xxl-job-service
server.port=8041
# 数据库连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# xxl-job
xxl.job.admin.addresses=http://127.0.0.1:18080/xxl-job-admin
xxl.job.accessToken=default_token
xxl.job.executor.appname=xxl-job-executor-sample
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.admin.addresses和上述一致
  • xxl.job.accessToken 和上述一致default_token
  • xxl.job.executor.logpath配置日志路径

3.3 XxlJobConfig

配置lxx-job的相关配置信息,注入XxlJobSpringExecutor

@Configuration
@Slf4j
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;
    }
}

3.4 SampleXxlJob

具体的任务执行方法。

@Component
@Slf4j
public class SampleXxlJob {
    /**
     * 1、简单任务示例(Bean模式)
     */

    @XxlJob("demoJobHandler")
    public void demoJobHandler() throws Exception {
        log.info("开始执行任务,{}", LocalDateTime.now());

        // 模拟执行任务,比如查询所有用户,给用户发送短信
        for (int i = 0; i < 5; i++) {
            log.info("执行任务: " + i);

            // 有关数据库等操作一定要延迟,否则数据库连接资源会瞬间被占满
            TimeUnit.SECONDS.sleep(1);
        }
    }

    /**
     * 2、分片广播任务
     */

    @XxlJob("shardingJobHandler")
    public void shardingJobHandler() throws Exception {

        // 分片参数
        int shardIndex = XxlJobHelper.getShardIndex();
        int shardTotal = XxlJobHelper.getShardTotal();

        log.info("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal);

        // 业务逻辑
        for (int i = 0; i < shardTotal; i++) {
            if (i == shardIndex) {
                log.info("第 {} 片, 命中分片开始处理", i);
            } else {
                log.info("第 {} 片, 忽略", i);
            }
        }

    }
}

4. 任务调度

4.1 执行器

  • application.properties配置中一致。
xxl-job 分布式任务调度

4.2 任务管理

输入Cron 每10秒执行一次  0/10 * * * * ?

JobHandler与代码中的方法名称一致demoJobHandler()

xxl-job 分布式任务调度
xxl-job 分布式任务调度
xxl-job 分布式任务调度

4.3 调度日志

xxl-job 分布式任务调度

SpringBoot打印日志

com.example.xxljobdemo.job.SampleXxlJob  : 开始执行任务,2023-08-28T16:53:10.005
2023-08-28 16:53:10.005 INFO 1972 --- [3-1693212320085] com.example.xxljobdemo.job.SampleXxlJob  : 执行任务: 0
2023-08-28 16:53:11.010  INFO 1972 --- [3-1693212320085] com.example.xxljobdemo.job.SampleXxlJob  : 执行任务:1
2023-08-28 16:53:12.017 INFO 1972 --- [3-1693212320085] com.example.xxljobdemo.job.SampleXxlJob  : 执行任务:2
2023-08-28 16:53:13.017 INFO 1972 --- [3-1693212320085] com.example.xxljobdemo.job.SampleXxlJob  : 执行任务:3

5. 总结

XXL-Job是一个功能强大、易用的分布式任务调度框架,适用于各种任务调度场景。

它为我们提供了一个可靠、可视化的任务调度中心,并具备了任务调度、执行监控、失败重试等核心功能,能够帮助我们简化分布式任务调度的开发和管理,提高系统的可靠性和稳定性。


xxl-job 分布式任务调度

Spring Cloud 微服务系列 完整的代码在仓库的sourcecode/spring-cloud-demo目录下。

gitee(推荐):https://gitee.com/cunzaizhe/xiaohuge-blog

github:https://github.com/tigerleeli/xiaohuge-blog

关注微信公众号:“小虎哥的技术博客”,让我们一起成为更优秀的程序员❤️!

原文始发于微信公众号(小虎哥的技术博客):xxl-job 分布式任务调度

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/169736.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!