背景
为了可能更加灵便的管制定时工作,最近在我的项目中开始推广定时任务调度零碎,跟不少大厂敌人交换之后,发现 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