前言

最近在做一个基于ruoyi框架的项目的IOT项目,本文将xxl-job与ruoyi自带的quartz进行比较。

xxl-job与quartz的异同

这一部分主要是将quartz和xxl-job做一个比较,quartz是一款开源的使用非常广泛的定时任务框架。其可以说是定时任务的鼻祖,很多理念都与xxl-job类似。

整体来说,xxl-job就是quartz的一个增强版,其弥补了quartz不支持并行调度,不支持失败处理策略和动态分片的策略等诸多不足,同时其有管理界面,上手比较容易,支持分布式,适用于分布式场景下的使用。两者相同的是都是通过数据库锁来控制任务不能重复执行。

xxl-job官方文档:分布式任务调度平台XXL-JOB

quartz用户文档:

xxl-job与ruoyi自带的quartz的优劣

ruoyixxl-job
管理界面自带管理界面,无需额外工作有UI管理界面,需要整合到项目里面去
分布式使用quartz+Feign+nacos方式实现,由于Feign的特性,调度中心和执行器之间没有完全解耦,需要申明FeignClient.调度中心和执行器完解耦,通过DB方式进行任务注册发现。
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

其中BEAN模式可以很方便的整合ruoyi微服务和xxl-job框架,只需要修改相关配置

执行任务的唯一性数据库锁

在xxl-job中实现分布式锁用的数据库的分布式锁,其中一个表只存储表的名称,通过 for update 来查询锁。

1):conn.setAutoCommit(false); 关闭隐式提交。

2):select * from xxl_job_lock where lock preparedStatement.execute(); 获得显示排他锁,然后开启事务。

3):conn.commit(); 事务完毕后,提交。

4):preparedStatement.close(); 释放悲观锁开启下一次轮回。

Logo

快速构建 Web 应用程序

更多推荐