分布式调度XXL-JOB - 详解

1.概述

1.1、XXL-JOB介绍

XXL-Job:是大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

官网地址: 分布式任务调度平台XXL-JOB/

1.1.1 系统架构图

1.1.2 设计思想

将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。

将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。

因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;

2.快速入门

2.1、下载源码

2.1.1 源码下载地址:

github:https://github.com/xuxueli/xxl-job

gitee:https://gitee.com/xuxueli0323/xxl-job

2.2、初始化调度数据库

clone项目源码,获取 “调度数据库初始化SQL脚本” 并执行即可,“调度数据库初始化SQL脚本” 位置为:

/xxl-job/doc/db/tables_xxl_job.sql

2.3、maven 编译源码

解压源码,按照maven格式将源码导入IDE, 使用maven进行依赖引入即可,源码结构如下:

2.4、 配置部署调度中心

2.4.1 调度中心配置

修改xxl-job-admin项目的配置文件application.properties,把数据库账号密码配置上

### web
server.port=8088
server.servlet.context-path=/xxl-job-admin
​
### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false
​
### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
​
### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
​
### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model
​
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.202.200:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=WolfCode_2017
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
​
### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000
​
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.from=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
​
### xxl-job, access token
xxl.job.accessToken=default_token
​
### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN
​
## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
​
### xxl-job, log retention days
xxl.job.logretentiondays=30
2.4.2 部署项目

运行XxlJobAdminApplication程序即可.

调度中心访问地址: http://localhost:8088/xxl-job-admin

默认登录账号 “admin/123456”, 登录后运行界面如下图所示。

至此“调度中心”项目已经部署成功。

2.5 配置部署执行器项目

2.5.1 添加Maven依赖

创建SpringBoot项目集成xxl-job并且添加如下依赖:

                org.springframework.boot
                spring-boot-dependencies
                2.4.2
                pom
                import
​
            org.projectlombok
            lombok
            org.mapstruct
            mapstruct
            1.4.2.Final
            org.mapstruct
            mapstruct-processor
            1.4.2.Final
            org.springframework.boot
            spring-boot-starter-log4j2
            2.4.2
            com.alibaba
            fastjson
            1.2.24
            com.google.guava
            guava
            19.0
            org.apache.commons
            commons-lang3
            3.11
​
            org.springframework.boot
            spring-boot-starter-data-redis
                    logback-classic
                    ch.qos.logback
                    spring-boot-starter-logging
                    org.springframework.boot
​
            com.fasterxml.jackson.core
            jackson-databind
​
            org.springframework.boot
            spring-boot-starter-web
​
            mysql
            mysql-connector-java
​
            org.springframework.boot
            spring-boot-starter-jdbc
            com.alibaba
            druid-spring-boot-starter
            1.2.15
​
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.2
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
            com.xuxueli
            xxl-job-core
            2.3.1

2.5.2 执行器配置

在配置yaml文件中添加如下配置:

xxl:
  job:
    admin:
      ### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
      addresses: http://127.0.0.1:8088/xxl-job-admin
      ### 执行器通讯TOKEN [选填]:非空时启用;
    accessToke: default_token
    executor:
      ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
      appname: xxl-job-executor-sample
      ### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
      ip: 127.0.0.1
      ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 9999
      ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath: /data/applogs/xxl-job/jobhandler
      ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
      logretentiondays: 30

2.5.3 添加执行器配置

创建XxlJobConfig配置对象:

@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() {
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
}
2.5.4 添加任务处理类

添加任务处理类,交给Spring容器管理,在处理方法上贴上@XxlJob注解Demo

@Component
public class XxlJobController {
    @XxlJob("demoXXjob")
    public void demoXXjob() throws Exception {
        System.out.println("执行定时任务,执行时间:"+new Date()+"Hello xxl-job");
    }
}

2.5.5 实战代码
@Component
public class XxlJobController {
    //自建表做查询,省略建表与查询业务
    @Resource
    private SubjectCategoryService subjectCategoryService;
​
    @XxlJob("selectEamInfo")
    public void selectEamInfo() throws Exception {
        Result> listResult = subjectCategoryService.searchInfo();
        listResult.getData().forEach(result->{
            System.out.println(result);
        });
        System.out.println("执行定时任务,执行时间:"+new Date());
    }
}

2.6 运行程序

2.6.1 任务配置&触发执行

登录调度中心,在任务管理中新增任务,配置内容如下:

新增后界面如下:

接着启动定时调度任务

2.6.2 查看日志

在调度中心的调度日志中就可以看到,任务的执行结果.

管控台也可以看到任务的执行信息.

2.6.3、实战效果如下

配置xxljob表达式:

执行一次验证

日志查看

后台查看

即xxl_job集成springboot项目成功。

posted on 2025-08-16 15:42  ljbguanli  阅读(44)  评论(0)    收藏  举报