乐趣区

关于分布式:分布式任务调度系统XXLJob快速入门体验

背景

为了可能更加灵便的管制定时工作,最近在我的项目中开始推广定时任务调度零碎,跟不少大厂敌人交换之后,发现 XXL-Job 市场还是挺广的,功能强大,定为首选。

再加上 XXL-Job 是基于 Spring Boot 的开源我的项目,二次开发非常容易,所以就选定了 XXL-Job。这篇文章就带大家领略一下 XXL-Job 的魅力,能够不必,但不可不晓得。

XXL-Job 简介

拜访官方网站会看到 XXL-Job 各类个性介绍,这里总结一下就是:学习简略、轻量级、易扩大、动静失效、调度核心 HA、执行器 HA、弹性扩容缩容、路由策略、故障转移、阻塞解决策略、工作超时管制、工作失败重试、工作失败告警、分片播送工作、动静分片、事件触发等很多个性。

下面介绍了长处,而集体在实际和应用的过程中发现代码的规范性、代码品质等都有待进步和标准。具备二次开发能力的咱们,能够对配置文件环境隔离、日志配置等进行定制化解决。晋升空间还是有的。

上面就来具体实际、体验一下。

源码下载

可通过 GitHub 或 Gitee 上下载源码:

GitHub 地址:http://github.com/xuxueli/xxl…

Gitee 地址:https://gitee.com/xuxueli0323…

这里通过 Gitee 下载:

git clone git@gitee.com:xuxueli0323/xxl-job.git

下载实现,用 IDE 关上我的项目构造:

间接拉取代码是骨干代码,可看到版本是 2.3.1-SNAPSHOT,原则上还是倡议应用稳固版本。此时能够通过 git 命令从骨干切换到稳固版本 2.3.0 或通过 IDE 提供的版本工具进行切换。

这里通过 git 命令切换到近程分支:

git checkout -b 2.3.0 origin/2.3.0

我的项目构造

我的项目源码构造如下:

  • xxl-job-admin:调度核心
  • xxl-job-core:公共依赖
  • xxl-job-executor-samples:执行器 Sample 示例;

    • xxl-job-executor-sample-springboot:Springboot 版本,通过 Springboot 治理执行器,举荐这种形式;
    • xxl-job-executor-sample-frameless:无框架版本;

部署时,调度核心独自部署,samples 中代码可集成到我的项目中进行应用。

初始化表构造

找到我的项目源码中 doc/db 目录下的 tables_xxl_job.sql,用来初始化数据库表构造。

会创立一个名为 xxl_job 的数据库,并且蕴含了 8 张以 xxl_job 结尾的表

批改我的项目配置

关上 xxl-job-admin 我的项目中的 application.properties 文件进行后盾的配置,比方配置数据库连贯、配置发送邮件地址等信息。

此时你应该也想到,须要把整个我的项目纳入到本人的代码仓库,进行配置批改、环境隔离以及进行局部二开工作。

笔者进行了简略的革新,将本来的 application.properties 配置文件进行了拆分:

  • application.properties
  • application-dev.properties
  • application-prod.properties
  • application-test.properties

在 application.properties 中指定不同环境采纳不同的配置文件信息,不便自动化公布。

spring.profiles.active=dev

打包公布

此时能够间接在 IDE 中执行 Spring Boot 的 main 办法来启动我的项目,看看成果,也能够打成 jar 包进行公布。应用过 Spring Boot 的敌人们应该都晓得如何去操作。

这里间接启动,会发现日志文件找不到,无奈启动程序。起因在 logback.xml 中的配置:

<property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/>

最简略的操作是将该门路改为本地存在的目录。但笔者认为将日志门路写死在 xml 文件中并不优化,进一步二开将其提取到配置文件中。

<!--    <property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/>-->
    <springProperty scope="context" name="log.path" source="log.path"/>

不同环境的配置文件增加门路配置:

log.path=/Users/zzs/temp/xxl-job-admin.log

批改之后,启动结束。

拜访:http://localhost:8888/xxl-job…

这里笔者将端口进行了批改。默认的用户名为:admin,明码为:123456。

登录胜利,主界面显示如下:

对于 admin 的部署曾经实现,接下来须要先编写执行器的代码,而后再通过 admin 进行调用。

执行器编写及部署

执行器代码可间接参考 xxl-job-executor-sample-springboot 中的实例进行编写。

实质上就是 Spring Boot 我的项目中引入了 xxl-job 的依赖:

<dependency>
   <groupId>com.xuxueli</groupId>
   <artifactId>xxl-job-core</artifactId>
   <version>${project.parent.version}</version>
</dependency>

而后通过配置类对 XxlJobSpringExecutor 进行初始化,剩下的就是基于 @XxlJob 来定义定时工作的 JobHandler。

如下便新定义了一个 JobHandler:

@Component
public class MyXxlJob {@XxlJob("helloXxlJobHandler")
    public void helloXxlJobHandler() {String jobParam = XxlJobHelper.getJobParam();
        System.out.println("jobParam=" + jobParam);
        System.out.println("Hello XXL-Job");
    }
}

在启动之前,先对 xxl-job-executor-sample-springboot 的配置文件进行批改,除了后面提到的日志文件,还设计到 xxl.job.admin.addresses,批改为 admin 的地址:

xxl.job.admin.addresses=http://localhost:8888/xxl-job-admin

执行 main 办法,启动程序。此时,再回到 admin 治理页面的工作治理菜单:

点击右上角新增工作:

依照参数阐明配置实现,后果如下:

执行实现,可在调度日志中查看到执行的历史。

看看控制台:

jobParam=hello,xxl-job
Hello XXL-Job

程序被胜利调用,同时也获取到了 admin 传递的参数。

尔后,该定时工作的执行频次、执行规定,甚至执行时传递的参数都能够通过 admin 治理平台进行操作。

小结

通过本文体验了一把 XXL-Job,感觉怎么样?比在我的项目中写死定时工作或在数据库中配置灵便多了,有治理页面,有执行历史,能够灵便配置,甚至能够传递调用参数等等性能都是十分实用的。倡议你也尝试一把。

博主简介:《SpringBoot 技术底细》技术图书作者,热爱钻研技术,写技术干货文章。

公众号:「程序新视界」,博主的公众号,欢送关注~

技术交换:请分割博主微信号:zhuan2quan

退出移动版