JAVA进阶之路-定时器xxl-job 搭建

Java xxl-job 详解 xxl-job 是一个轻量级分布式任务调度平台,由国人谢旺(Xie Wang)开发。它主要解决了分布式系统中关于任务调度、定时执行、任务分片、失败重试等方面的问题。xxl-job 提供了一个简单、易用、功能强大的解决方案,适用于需要定时执行任务的业务场景。在 xxl-job 的管理界面中,创建任务时可以设置分片参数。例如,可以将分片参数设置为,这意味着任务将被分成3个分片,每个分片负责一部分数据。xxl-job 是一个功能强大的分布式任务调度平台,适用于需要定时执行任务的业务场景。 阅读详情

JAVA进阶之路-定时器xxl-job 搭建

xxl-job定义

XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

xxl-job相对于其他调度器的优点

  • xxl-job 首先采用分布式任务调度框架,可以进行分布式部署
  • xxl-job 简单,界面化对任务进行CRUD操作
  • 架构是讲执行器注册到注册中心,也成调度中心,通过调度中心调度任务
  • 调度可支持HA
  • 执行器可支持分布式, 还可以支持弹性的扩容与缩容
  • 具有路由策略,在创建任务的时候需要选择指定的路由策略,路由策略有轮询、随机、一致性HASH、最不经常使用、故障转移、忙碌转移。
    通过路由策略选择一个执行器,执行相应的任务
  • 故障转移,当执行器出现故障,调度中心会将任务转移到其他执行器上执行
  • 阻塞处理, 任务过多,执行器来不及处理,会按照创建任务时指定的策略进行处理,有串行处理,丢弃后续调度,覆盖之前调度
  • 任务超时,任务失败重试,任务失败警告
  • 分片广播
  • 支持事件调度,cron 触发,直接执行
  • 支持实时日志, 任务进度查看
  • 任务创建支持GLUE, 支持不同语言处理
  • 全异步, 任务调度流程全异步化设计实现

上面引用于:https://www.jianshu.com/p/3dc0bdb677ca
推荐篇文章 介绍了三种流行调度器的各自优缺点的文章

xxl-job的缺点

调度中心通过获取DB锁来保证集群中执行任务的唯一性,如果短任务很多,随着调度中心集群数量增加,那么数据库的锁竞争会比较厉害,性能不好。

个人使用感觉

博主本人以前是使用的quartz 感觉最麻烦的就是没有管理页面,有时想调试定时器时,要么是将定时器的事件调短,增加调用次数,要么就是进数据库修改下次调用时间。可以说是非常麻烦。后面换成了xxl-job之后,头也不痛了,脚也不酸了。有了管理页面 也有了让人使用起来十分舒服的页面修改调度器信息,再也不用让妈妈担心了。目前博主只有了一段时间 并没发现有什么不方便的,如果大家有的话欢迎在下方留言分享,说不定有大神也遇到过此问题并解决过哦!

准备工作

1.下载源码

①、GitHub:https://github.com/xuxueli/xxl-job
  
②、码云:https://gitee.com/xuxueli0323/xxl-job
在这里插入图片描述

2.初始刷sql数据,并修改xxl-job-admin项目配置文件里的mysql配置为自己host和账号密码

在这里插入图片描述
修改完后就可以直接启动项目 启动后在浏览器输入localhost:8080/xxl-job-admin 即可访问 端口和访问项目名均可在配置文件里进行修改
在这里插入图片描述
访问后会出现如下页面

在这里插入图片描述
这样就代表以及部署成功了.账号密码默认为 admin 123456 输入后就能进入管理平台了 稍后我们再介绍管理平台的具体用处

开始配置执行器

相对于quartz xxl-job对于的代码侵略性还是算友好的,下面可以开始进行执行器的配置。我们以spring boot作为实例项目。

  1. 添加xxl-job的依赖
        <!-- xxl-job-core -->
        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.3.1-SNAPSHOT</version>
        </dependency>
  1. 在application的配置文件中加入xxl-job的配置
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
# xxl-job管理项目的地址 如果加了就等于说自动将本项目里面的执行器注入到xxl-job的管理平台进行管理,如果没加就是需要手动在管理平台加入此项目的执行器
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin 

### xxl-job, access token
xxl.job.accessToken=

### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample  # 执行器的项目名
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999 # netty_http 端口,定时任务通信端口
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler   # log日志的保存地址
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30	# log日志保存天数

  1. 有了配置后就需要使用配置 这时候我们需要把配置文件的熟悉通过config文件注入到spring
/**
 * xxl-job config
 *
 * @author xuxueli 2017-04-28
 */
@Configuration
public class XxlJobConfig {

    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }

    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */


}

3.注入后就可以开始写我们的执行器了

@Component
public class SpotKlineXxlJob {
	// 该注解的内容就是该执行器的名字
	@XxlJob("testJOb")
    public ReturnT<String> testJOb(String param) {
    	//其中 ReturnT<String>形参 和 String param 是配对的 如果加了实参的话就必须有返回形参
    	//加实参是有些执行器特殊 需要提供参数进行运行。
    	//如果不加实参 默认返回类型为void即可
        return ReturnT.SUCCESS;
    }
}

大功告成,这就已经完成xxl-job在项目中的引入了,不需要像quartz一样需要在启动类里面去增加代码调用这些执行器。所以代码侵略性会比较友好。届时我们只需要大概管理平台就能看到我们本项目的执行器和执行任务管理

admin管理平台

进入页面后打开执行器管理菜单,这里我们就能看到我们刚项目中自动注入的执行器,注册方式为自动注册。AppName 这个字段的值就是我们在配置文件中xxl.job.executor.appname 这个字段的值
在这里插入图片描述
如果你是使用手动注册的方式的话 届时是什么信息都没有的,需要你新增执行器。填入appName(对应你在项目中配置xxl.job.executor.appname时的信息),名称 给你执行器在管理平台命个名字,注册方式就填你手动录入即可,剩下就是机器地址了,机器地址就填你的项目部署机器的ip加上你项目部署时在配置文件填写的xxl.job.executor.port这个端口的数据
例如 http://10.0.0.33:9999
http://这前缀是必须要输入的
在这里插入图片描述

查看完执行器接下来查看我们所配置的定时器任务信息,打开任务管理就能看到我们写的任务。我们可以点击操作里的编辑对定时器任务进行修改
在这里插入图片描述
设置负责人和cron表达式 执行器就是选择我们自动注入的执行器 这个执行器名字也是自动注入后默认的名字 如果想要修改也可以在执行器管理菜单中进行修改,如果是手动注册的话新增后选择你自己创建的执行器 剩下的负责人 任务描述还有cron表达式 这几个按自己业务填写,剩下的必填项基本默认就行
在这里插入图片描述
修改完后可以启动任务,任务就会根据cron表达式去执行。也可以点击操作里的执行一次打到立即生效定时器任务得效果,这个功能还是很方便测试和调试代码的。
执行后我们可以在调度日志或者操作里面的查询日志查看我们的任务执行结果
在这里插入图片描述
点击查看调度备注就能看到失败日志或者成功日志。

总结

以上就是xxl-job的搭建以及正常的使用方法。相比qurtz的话会比较方便,有了管理页面,也没有quartz那么繁重。

XXL-JOB的配置与使用 目录 一、什么是XXL-JOB? 二、Java主流三大定时器技术选型 三、XXL-JOB的一些特性: 四、XXL-JOB与项目结合 五、执行器(任务调度中心): 一、什么是XXL-JOB?   XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 二、Java主流三大定时器技术选型  ... 阅读详情

相关推荐

Springboot 集成xxl-job实现定时调度任务

一、前言 因为自己开发的系统中需要使用到定时调度的情境,所以结合自己使用的Springboot项目框架,准备接入xxl-job定时调度平台。 二、准备 1.先从xuxueli的GitHub上将xxl-job的源代码克隆一份到本地。 具体链接为https://github.com/xuxueli/xxl-job git clone https://github.com/xuxueli/xxl-job...

linkk 7137

【Java】xxl-job的快速入门

xxl-job的简单入门案例

m0_64210833的博客 8022

分布式任务调度平台XXL-JOB安装及使用

🚀 优质资源分享 🚀 学习路线指引(点击解锁) 知识定位 人群定位 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 一、为什么需要任务调度平台 在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题: 不支持集群、不支持统计、没有管理平台、没有失

www_xuhss_com的博客 1687

详细分析Java中的分布式任务调度框架 XXL-Job

在Java中,分布式任务调度框架 XXL-Job 是一个开源的分布式任务调度平台,用于实现分布式系统中的定时任务调度和分布式任务执行。

码农研究僧的博客 5499

【2.1 分布式定时任务(XXL-JOB)】一文汇总所有常见的Java定时任务框架介绍

在Java中,常见的定时任务框架包括Quartz、Spring Task、Elastic-Job和XXL-JOB等。

奶爸的编程之路,也就一周冷个三天 1635

Python爬虫实战:西瓜视频m3u8解析与FFmpeg下载合并

网络爬虫与流媒体解析是Python工程实践中的常见需求,其核心在于通过HTTP请求获取数据并解析特定格式。m3u8作为HLS协议索引文件,将视频切分为ts分片,便于流式传输。结合FFmpeg的多线程处理能力,可高效完成分片下载与合并,技术价值在于提升视频处理效率。典型应用场景包括视频下载、离线缓存等。本文以西瓜视频为例,详细讲解如何使用requests库提取m3u8地址,并调用FFmpeg批量下载ts分片合并为mp4,涵盖请求伪装、索引解析及常见问题排查。

weixin_31856057的博客 15万+

Java - XXL-JOB

说到定时任务想必每一个开发人员都不陌生,开启定时任务的方式也多种多样,如: @Scheduled,Quertz,Elastic-Job, xxl-job等。 xxl-job作为目前业界流行的分布式任务调度框架,受到越来越多的人的信任,越来越多的公司也接入了xxl-job作为定时任务统一调度中心。 想了解xxl-job的可以去github等平台学习。 在这里只介绍下项目中如何使用xxl-job,如何在任务管理界面配置定时任务。 xxl-job包依赖,maven引入 <depend

小泽的博客 3867

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

【Java】xxl-job

*** 添加新订单任务* @return*/

开心星人的博客 3321

基于Opencv+Mediapipe的头部姿态检测

在学生课堂专注度检测项目中,可以通过学生头部姿态来确定学生注意力方向,从而判断其是否专注于课堂。

weixin_67879842的博客 2335

北斗导航 | 基于matlab的卫星导航单点定位算法

单点定位(Single Point Positioning, SPP)通过接收机观测至少4颗卫星的伪距(含误差的距离测量值),解算接收机位置(经度、纬度、高度)及钟差。HDOP < 2 为高精度定位条件。

尘世冰封的专栏 970

Xxl-job 一文读懂

数据备份订单未支付则自动取消定时爬取数据定时推送信息定时发布文章定时生成报表定时任务是指基于给定的时间点,间隔或者给定执行次数自动的执行程序。任务调度室系统的重要组成部分,而对于实时的系统,任务调度直接影响着系统的实时性。任务调度涉及多线程并发、运行时间规则定制与解析、线程池的维护等多项工作。application.properties 配置文件详解### web 服务端口及其项目名称### actuator 健康检查### resources 静态资源配置。

zhouzhiwengang的专栏 7201

硬核入门!Python爬虫实战:爬取豆瓣读书TOP250,书名+评分+简介,一键生成精美Excel书单(2026避坑版)

通过这个实战,你不仅获得了一份珍贵的豆瓣TOP250书单HTTP请求与响应的本质。HTML解析的核心技巧。反爬虫的基本应对策略。数据清洗与存储的完整流程。爬虫是通往数据世界的一把钥匙。现在,钥匙在你手中,去探索更多有趣的数据吧!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 545

XXL-JOB

一、什么是XXL-JOB? XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 二、Java主流三大定时器技术选型 选型时原则:少服务器 后期维护方便 增加任务省事而且快捷 不涉及启停服务 1、Quartz 优点:支持集群部署 缺点:没有自带的管理界面;调度逻辑和执行任务耦合在一起;维护需要重启服务 ...

Kevin's life 5687

虚拟机VMware Horizon Client与主机之间建立共享文件夹

因经常需要在虚拟机和主机之间传递一些日常文件,所以建立共享文件夹。 虚拟机中安装的系统为win10,主机中的系统为win10。 步骤: 第一步:先在虚拟机win10中新建文件夹(我重命名为“共享文件夹”),然后右键属性->共享->共享 进去之后点击自己的账户名 然后点共享。操作完成后,再返回属性界面就能看到该文件夹已经共享而且出现了共享链接,记下此链接。 第二步:回到主机桌面->此电脑->最上面计算机->添加一个网络位置- 点击下一步 然后自定义网络位置,下一步,如下图

AnChenliang_1002的博客 1万+

从0到1:用Claude 3.7十日拿下教育部课题申报书(附可修改LaTeX模板)

🟣"作为教育部人文社科项目评审专家,请根据近三年立项数据分析,为[您的学科方向]领域推荐5个具有创新性且符合'十四五'规划的重点选题,要求选题体现交叉学科特征,并标注潜在理论突破点"🟣"根据前期研究基础,创建包含4个研究模块、12个关键节点的三维技术路线图,要求体现实验仿真-实证研究-理论建模的螺旋递进关系,并标注每个节点的预期成果形态"🟣"现在切换至教育部学科评审组组长模式,从选题价值、创新程度、研究可行性三个维度对本申报书进行盲审,生成包含9个扣分风险点的诊断报告及修改优先级排序"

智能AI让学术科研更容易 545

XXL-JOB的简单部署及使用

xxl-job的简单使用

一起交流,一起进步 3096

YOLOv8 模型进化全解析:百种创新模块集成方法与实战部署指南(附资料链接)

动态网络 | DeformableConv/DynamicHead| +2.8% || 轻量化卷积 | GhostConv/MobileConv | +1.2% || 多尺度融合 | AFPN/ASFF | +3.5% || 注意力机制 | CA/EMA/SimAM | +1.8-4.2% |

FJN110的博客 111

springBoot项目整合xxl-job

xxl-job是一个分布式定时器任务派遣服务,这个项目主要有以下三部分组成 :xxl-job-admin: 调动中心,主要是提供任务管理平台的页面,需要把该模块单独打包作为一个服务部署,定时器再执行时,是通过该服务去调用我们的业务服务完成任务执行。xxl-job-core: 公共依赖模块,在整合业务服务的时候,需要引入该依赖。xxl-job-executor-samples:官方提供的demo。

m0_65736157的博客 1223

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【定时器】XXL-JOB使用

官网地址:http://www.xuxueli.com/xxl-job/#/ XXL-JOB:轻量级任务调度框架 竞品分析: 功能 Quartz集群 LTS Elastic-Job XXL-JOB 架构设计 中心式(伪) 无中心式 无中心式 中心式 依赖框架 Java ZK ZK Java Web UI ...

千千 670

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

xxl-job 初学(保姆级入门教程)

xxl-job 快速入门

xhmico的博客 9009

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

@Scheduled,Quartz,XXL-JOB三种定时任务总结

Quartz是一个开源的、功能强大且灵活的作业调度框架,它支持复杂的调度需求,作业持久化、集群部署等功能。它允许你按照设定的时间规则执行特定的任务,例如定时执行、循环执行、间隔执行等。Quartz可以与Spring等框架无缝集成,被广泛应用于企业级应用中。XXL-JOB是一个分布式任务调度平台,用于在分布式系统中进行任务调度和管理。XXL-JOB提供了可视化的任务管理界面、任务的动态添加、修改、删除等功能。它支持分布式部署,并提供了任务执行日志、任务运行状态等监控功能。

m0_58660225的博客 2760

XXL-JOB简介

首先我们得知道XXL-JOB是什么,他是一个分布式调度平台。 背景 首先介绍一下定时任务的概念,定时任务主要是包括某个时间点去执行某个具体的任务。在Java中实现定时任务的方式主要有几种: while(true)+Thread.sleep: 通过轮询+线程休眠的方式实现定时任务 java.util.Timer+java.util.TimerTask: Timer是jdk提供的一个定时器工具,它可以计划执行一个任务或反复执行一个任务;TimerTask是jdk的一个抽象类,它的子类代表一个可以被Tim

weixin_43918614的博客 1701

开源定时器教程:Quartz与XXL-JOB全面对比与实践

定时任务是指在特定时间或按照固定时间间隔自动执行的任务。数据备份与清理报表生成与发送缓存刷新与预热业务批处理系统监控与告警第三方系统数据同步​​Quartz​​是一个功能强大的开源任务调度框架,诞生于2001年,由OpenSymphony社区开发,现由Terracotta维护。它以强大的调度能力和高度可扩展性著称,被广泛应用于单机和集群环境。​​Job​​:定义任务逻辑,开发者通过实现Job接口定义具体任务内容​​Trigger​​:定义任务触发规则,支持多种触发器类型​。

Rysxt_的博客 1828

分布式任务调度 xxl-job

1. 集中式任务调度 集中式任务与分布式任务调度恰好相反的概念,集中式任务就是单机任务,一个项目,一台服务器,也就是我们常说的单体应用。对于集中式任务,也就是我们Java开发中常见的定时任务。 1.1 定时任务 定时任务是指在指定时间去执行任务(业务代码); 定时任务基本概念图 1.2 集中式任务调度的缺陷 不支持分片任务. 处理有序数据时, 多机器分片执行任务处理不同数据. 不支持生命周期统一管理. 不重启服务情况下关闭, 启动任务. 不支持集群, 存在任务重复执行的问题. 不支持失败重试. 出现异

学习技术的路上不断沉淀自己 3089

【学习笔记】xxl-job任务调度

在Java中定时任务调度框架可以分为单机版本和分布式版本:Spring3.0 以后自带的 task,配置简单功能较多,如果系统使用单机的话可以优先考虑spring定时器。: 是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,其在唯品会内部已经发部署350+个节点,每天任务调度4000多万次。同时,管理和统计也是它的亮点。

PleaseBeStrong的博客 1056
上一篇: JAVA进阶之路-mybatis plus apply 坑
下一篇: JAVA进阶之路-mysq 查询某个字段中重复数据
丘下两点vvv
博客等级 码龄9年 3粉丝 12原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值