文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

分布式任务调度XXL-Job,贼好用,体验一把

2024-12-02 08:53

关注

再加上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

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

xxl-job

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

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

git checkout -b 2.3.0 origin/2.3.0

项目结构项目源码结构如下:

部署时,调度中心单独部署,samples中代码可集成到项目中进行使用。

初始化表结构

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

会创建一个名为xxl_job的数据库,并且包含了8张以xxl_job开头的表

xxl_job表

修改项目配置

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

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

笔者进行了简单的改造,将原本的application.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文件中并不优化,进一步二开将其提取到配置文件中。


<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。

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

xxl-job-admin

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

执行器编写及部署

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

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

<dependency>
<groupId>com.xuxueligroupId>
<artifactId>xxl-job-coreartifactId>
<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,感觉怎么样?比在项目中写死定时任务或在数据库中配置灵活多了,有管理页面,有执行历史,可以灵活配置,甚至可以传递调用参数等等功能都是非常实用的。建议你也尝试一把。


来源:程序新视界内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯