分布式任务调度系统XXL-Job快速入门体验

分布式任务调度系统XXL-Job快速入门体验
背景
 
为了能够更加灵活的控制定时任务,最近在项目中开始推行定时任务调度系统,跟不少大厂朋友交流之后,发现XXL-Job市场还是挺广的,功能强大,定为首选。
 
再加上XXL-Job是基于Spring Boot的开源项目,二次开发非常容易,所以就选定了XXL-Job。这篇文章就带大家领略一下XXL-Job的魅力,可以不用,但不可不知道。
 
XXL-Job简介
 
访问官方网站会看到XXL-Job各类特性介绍,这里总结一下就是:学习简单、轻量级、易扩展、动态生效、调度中心HA、执行器HA、弹性扩容缩容、路由策略、故障转移、阻塞处理策略、任务超时控制、任务失败重试、任务失败告警、分片广播任务、动态分片、事件触发等很多特性。
 
上面介绍了优点,而个人在实践和使用的过程中发现代码的规范性、代码质量等都有待提高和规范。具有二次开发能力的我们,可以对配置文件环境隔离、日志配置等进行定制化处理。提升空间还是有的。
 
下面就来具体实践、体验一下。
 
源码下载
 
可通过GitHub或Gitee上下载源码:
 
GitHub地址:http://github.com/xuxueli/xxl-job
 
Gitee地址:https://gitee.com/xuxueli0323/xxl-job
 
这里通过Gitee下载:
 
git clone git@gitee.com:xuxueli0323/xxl-job.git
 
1
 
下载完成,用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
 
这里笔者将端口进行了修改。默认的用户名为: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
 
1
 
执行main方法,启动程序。此时,再回到admin管理页面的任务管理菜单:
 
点击右上角新增任务:
 
按照参数说明配置完成,结果如下:
 
执行完成 ,可在调度日志中查看到执行的历史。
 
看看控制台:
 
jobParam=hello,xxl-job
 
Hello XXL-Job
 
程序被成功调用,同时也获取到了admin传递的参数。
 
此后,该定时任务的执行频次、执行规则,甚至执行时传递的参数都可以通过admin管理平台进行操作。
 
小结
 
经过本文体验了一把XXL-Job,感觉怎么样?比在项目中写死定时任务或在数据库中配置灵活

推荐阅读