【技术派后端篇】xxl-job实现定时任务

1 xxl-job简述

在当今的软件开发领域,分布式任务调度是一个重要的课题。xxl-job 作为一个分布式任务调度平台,以其开发迅速、学习简单、轻量级、易扩展等特点,受到了众多开发者的青睐。

2 xxl-job安装与使用

2.1 安装

首先,需要从官网下载代码。
在这里插入图片描述

需要注意的是,版本3.x开始要求Jdk17;版本2.x及以下支持Jdk1.8。如对Jdk版本有诉求,可选择接入不同版本。我这里下载了基于jdk8的最后的版本2.5.0

下载后在 idea 中打开,会看到如下目录结构:

  1. doc:包含文档资料,以及“调度数据库”建表脚本。
  2. xxl-job-core:公共 jar 依赖。
  3. xxl-job-admin:调度中心,是一个 spring boot 项目,可以直接启动。
  4. xxl-job-executor-samples:执行器,是 sample 示例项目,其中的 spring boot 工程也可直接启动,开发者可以在此项目上进行开发,或者将现有项目改造成执行器项目。
    在这里插入图片描述

下载代码后,还需要进行以下操作才能正常启动:
第一步,从 doc 文件夹中获取 SQL 脚本,并将其放到自己的 MySQL 数据库中执行 SQL 语句。执行完 SQL 脚本后,数据库中会生成相应的表。
在这里插入图片描述

第二步,在 admin 模块中修改 applicant.properties 配置文件,可根据需要修改启动端口号,同时必须修改数据库配置。
在这里插入图片描述

在这里插入图片描述

2.2 启动

直接启动 xxl-job-admin 模块。启动成功后,在浏览器端访问 web 页面 URL(注意端口号是自己设置的),例如:http://127.0.0.1:8089/xxl-job-admin/ 。登录进去后会看到相应的页面。
在这里插入图片描述
使用默认用户名和密码登录xxl-job的管理平台:
在这里插入图片描述
xxl-job管理平台首页:
在这里插入图片描述

这里先不详细讲解操作步骤,在后续 SpringBoot 和 xxl-job 整合后再进行详细介绍。完成这一步,说明 xxl-job 的准备工作已就绪,接下来就可以与 SpringBoot 进行整合了。

3 SpringBoot整合xxl-job实现定时任务

  • 项目仓库(GitHub):https://github.com/itwanger/paicoding
  • 项目仓库(码云):https://gitee.com/itwanger/paicoding
  • 分支:origin/feature/xxl_job_20230605

3.1 引入xxl-job依赖

在项目paicoding-core/pom.xml中引入 xxl-job 的相关依赖,为后续整合做好准备。

<!-- 引入xxl_job定时任务 -->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.4.0</version>
</dependency>

3.2 yml配置文件中配置xxl-job配置

paicoding-web/src/main/resources-env/dev/application-dal.yml 配置文件中进行 xxl-job 的配置,配置文件中的注释已经对各个功能进行了详细介绍,开发者需仔细查看注释。

# Xxl-Job分布式定时任务调度中心
xxl:
  job:
    admin:
      # 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。
      addresses: http://127.0.0.1:8089/xxl-job-admin
      # addresses: http://192.168.110.2:9090/xxl-job-admin
    # 执行器通讯TOKEN [选填]:非空时启用 系统默认 default_token
    accessToken: default_token
    executor:
      # 执行器的应用名称
      appname: pai-coding
      # 执行器注册 [选填]:优先使用该配置作为注册地址
      address: ""
      # 执行器IP [选填]:默认为空表示自动获取IP
      ip: ""
      # 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999
      port: 9998
      # 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
      logpath:
      #logpath: /data/logs/mls/job
      # 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
      logretentiondays: 7

需要注意的是,address 属性中的端口号一定要与上面 xxl-job admin 模块中的配置 server.port 相对应。

3.3 编写xxl-job的config配置文件

按照要求编写 xxl-job 的 config 配置文件,确保配置的正确性。
具体代码位置:com.github.paicoding.forum.core.config.XxlJobConfig

/**
 * xxl_job配置
 */
@Configuration
@Data
@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() {
        XxlJobHelper.log(">>>>>>>>>>> xxl-job config init.>>>>>>>>>>>");
        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 代码编辑执行任务

在要执行的定时任务方法上添加 @XxlJob() 注解,表明该方法需要被执行。

/**
 * 采用定时器方案,每天5:15分刷新站点地图,确保数据的一致性
 */
@XxlJob("autoRefreshCache")
public void autoRefreshCache() {
    log.info("开始刷新sitemap.xml的url地址,避免出现数据不一致问题!");
    refreshSitemap();
    log.info("刷新完成!");
}

完成 SpringBoot 代码编写后,启动该项目。
在这里插入图片描述

3.5 在xxl-job任务调度中心中添加执行器

注意,要先添加执行器,然后再启动项目。启动项目(执行器)后,等待一会儿(给项目注册进 xxl-job 一些时间),刷新网页,就可以看到执行器成功注册。
在这里插入图片描述

点击 onLine 机器地址对应的查看后,可以看到执行器地址。
在这里插入图片描述
在这里插入图片描述

3.6 在xxl-job任务调度中心中添加任务管理

在这里插入图片描述

添加任务管理并保存后,就可以看到该任务。将任务的 stop 状态设置为启动状态。
在这里插入图片描述
在这里插入图片描述

3.7 测试xxl-job

点击“执行一次”,项目中对应的定时任务就会执行,若能正常执行,说明整合成功。
在这里插入图片描述
在这里插入图片描述
控制台打印如下log,表示任务执行成功。
在这里插入图片描述

3.8 xxl-job日志查看

可以在相关界面查看 xxl-job 的日志,同时,查询总的日志可以在菜单—运行报表中进行查看。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 总结

在这里插入图片描述

通过以上详细的步骤,我们完成了使用 xxl-job 实现定时任务以及与 SpringBoot 的整合。xxl-job 凭借其出色的性能、可靠性和便捷的运维管理,为分布式任务调度提供了优秀的解决方案。希望这篇教程能够帮助开发者快速上手 xxl-job,在实际项目中发挥其强大的功能。当然,在使用过程中可能还会遇到各种问题,大家可以参考官方文档和社区讨论来解决。

5 参考链接

  1. 技术派xxl-job实现定时任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值