前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式任务调度系统XXL-Job快速入门体验

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

作者头像
程序新视界
发布2022-05-09 19:56:54
8050
发布2022-05-09 19:56:54
举报
文章被收录于专栏:丑胖侠丑胖侠

背景

为了能够更加灵活的控制定时任务,最近在项目中开始推行定时任务调度系统,跟不少大厂朋友交流之后,发现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下载:

代码语言:javascript
复制
git clone git@gitee.com:xuxueli0323/xxl-job.git

下载完成,用IDE打开项目结构:

xxl-job
xxl-job

直接拉取代码是主干代码,可看到版本是2.3.1-SNAPSHOT,原则上还是建议使用稳定版本。此时可以通过git命令从主干切换到稳定版本2.3.0或通过IDE提供的版本工具进行切换。

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

代码语言:javascript
复制
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表
xxl_job表

修改项目配置

打开xxl-job-admin项目中的application.properties文件进行后台的配置,比如配置数据库连接、配置发送邮件地址等信息。

此时你应该也想到,需要把整个项目纳入到自己的代码仓库,进行配置修改、环境隔离以及进行部分二开工作。

笔者进行了简单的改造,将原本的application.properties配置文件进行了拆分:

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

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

代码语言:javascript
复制
spring.profiles.active=dev

打包发布

此时可以直接在IDE中执行Spring Boot的main方法来启动项目,看看效果,也可以打成jar包进行发布。使用过Spring Boot的朋友们应该都知道如何去操作。

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

代码语言:javascript
复制
<property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/>

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

代码语言:javascript
复制
<!--    <property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/>-->
    <springProperty scope="context" name="log.path" source="log.path"/>

不同环境的配置文件添加路径配置:

代码语言:javascript
复制
log.path=/Users/zzs/temp/xxl-job-admin.log

修改之后,启动完毕。

访问:http://localhost:8888/xxl-job-admin

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

登录成功,主界面显示如下:

xxl-job-admin
xxl-job-admin

关于admin的部署已经完成,接下来需要先编写执行器的代码,然后再通过admin进行调用。

执行器编写及部署

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

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

代码语言:javascript
复制
<dependency>
   <groupId>com.xuxueli</groupId>
   <artifactId>xxl-job-core</artifactId>
   <version>${project.parent.version}</version>
</dependency>

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

如下便新定义了一个JobHandler:

代码语言:javascript
复制
@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的地址:

代码语言:javascript
复制
xxl.job.admin.addresses=http://localhost:8888/xxl-job-admin

执行main方法,启动程序。此时,再回到admin管理页面的任务管理菜单:

任务管理
任务管理

点击右上角新增任务:

新增任务
新增任务

按照参数说明配置完成,结果如下:

执行
执行

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

调度日志
调度日志

看看控制台:

代码语言:javascript
复制
jobParam=hello,xxl-job
Hello XXL-Job

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

此后,该定时任务的执行频次、执行规则,甚至执行时传递的参数都可以通过admin管理平台进行操作。

小结

经过本文体验了一把XXL-Job,感觉怎么样?比在项目中写死定时任务或在数据库中配置灵活多了,有管理页面,有执行历史,可以灵活配置,甚至可以传递调用参数等等功能都是非常实用的。建议你也尝试一把。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • XXL-Job简介
  • 源码下载
  • 项目结构
  • 初始化表结构
  • 修改项目配置
  • 打包发布
  • 执行器编写及部署
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档