Spring Boot | Spring Boot整合XXL-JOB开发定时任务

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情

XXL-JOB概述

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

—— 引自官网(官网地址:www.xuxueli.com/xxl-job/)

任务调度中心

1、下载XXL-JOB源码。

git clone https://github.com/xuxueli/xxl-job.git
复制代码

XXL-JOB源码目录结构说明:

  • doc:XXL-JOB文档(XXL-JOB架构图、XXL-JOB官方文档、数据表初始化脚本、效果截图)
  • xxl-job-admin:调度中心
  • xxl-job-core:公共依赖
  • xxl-job-executor-samples:执行器Sample示例
    • xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
    • xxl-job-executor-sample-frameless:无框架版本

2、创建数据库,执行初始化脚本。

创建数据库,数据库名称xxl-job。

执行SQL脚本文件,脚本文件位置:xxl-job\doc\db\tables_xxl_job.sql

3、运行调度中心(xxl-job-admin)。

使用IntelliJ IDEA打开项目xxl-job,修改调度中心配置。

调度中心配置文件地址:

/xxl-job/xxl-job-admin/src/main/resources/application.properties
复制代码

修改调度中心数据库连接信息:

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=abc123
复制代码

在IntelliJ IDEA中启动项目xxl-job-admin。待启动成功后在浏览器地址栏输入http://localhost:8080/xxl-job-admin进入任务调度中心登录页面。

输入默认的用户名、密码(admin/123456)登录系统。

执行器项目

在我们下载的XXL-JOB源码中有执行器示例程序(Spring Boot版),开发自己的执行器时可以参考。

1、创建Spring Boot项目,添加Maven依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
复制代码

2、编写配置文件。

# xxl-job配置
xxl:
  job:
    admin:
      # 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
      addresses: http://localhost:8080/xxl-job-admin
    executor:
      # 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
      address:
      # 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
      appname: xxl-job-executor-sample
      # 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
      ip:
      # 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
      port: 9999
      # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath:
      # 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
      logretentiondays: 15
    # 执行器通讯TOKEN [选填]:非空时启用;
    accessToken:
复制代码

这里的appname对应任务调度中心 --> 执行器管理 --> 执行器列表中执行器AppName

3、编写配置类。

@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;
    }
}
复制代码

3、编写执行器服务类

@Slf4j
@Component
public class XxlJobService {
    /**
     * 1、简单任务示例(Bean模式)
     */
    @XxlJob("customJobHandler")
    public ReturnT<String> customJobHandler(String param) throws Exception {
        log.info("## custom job handler run. ##");
        log.info("param: {}", new Gson().toJson(param));
        XxlJobHelper.log("XXL-JOB, Hello World.");
        for (int i = 0; i < 5; i++) {
            XxlJobHelper.log("beat at:" + i);
            TimeUnit.SECONDS.sleep(2);
        }
        return ReturnT.SUCCESS;
    }
}
复制代码

4、运行执行器项目。

测试

1、添加任务。

任务调度中心 --> 任务管理 --> 新增。

image-20220812111851876

填写完任务信息后点击“保存”按钮。然后在任务列表页面点击任务Row中的“操作”右侧的下拉框,选择执行一次,再点击“保存”,任务就被执行了一次了。

任务信息属性说明:

  • 任务描述:随便写点就好;
  • Cron:执行器执行时间;
  • 运行模式:这里选的Bean;
  • JobHandler:对应执行器类服务类中@XxlJob("customJobHandler")

之前用XXL-JOB做过一个定时任务,每天创建一个新表。长时间没有再接触XXL-JOB,几乎都忘记了。这次就记录一下操作步骤,下次再用的时候就看自己的笔记了。官方文档大而全,自己写的才是最适合自己的。

猜你喜欢

转载自juejin.im/post/7130829657045221389
今日推荐