xxLjob两个任务 pullGuanjiaSalesJob,不同的执行参数,配置了同一个 @XxlJob("pullGuanjiaSalesJob")两个任务同一个调用时间 CRON:0 0 3 * * ?,具体如何调度的,及任务如何执行的

在 XXL-JOB 中,当两个任务配置了相同的 @XxlJob("pullGuanjiaSalesJob") 方法且 CRON 表达式相同(如 0 0 3 * * ?,即每天凌晨3点触发),其调度和执行流程如下:


1. 调度中心的触发机制

(1) 任务存储与触发检查
  • XXL-JOB Admin(调度中心) 会定期扫描任务表(默认每秒一次),检查到达触发时间的任务。

  • 如果两个任务的 CRON 表达式均为 0 0 3 * * ?,调度中心会在 同一时间点(3:00:00) 生成两条任务触发记录。

(2) 任务触发顺序
  • 默认并发触发
    调度中心会 同时 向执行器发送两个任务的触发请求(即使 jobHandler 相同),但会携带不同的 jobId 和参数(如 param=type=daily 和 param=type=monthly)。

  • 阻塞策略影响
    如果任务配置了 SERIAL_EXECUTION(串行执行),调度中心会按任务ID顺序依次触发(前一个任务执行完成后,再触发下一个)。


2. 执行器的任务执行

(1) 任务分发到执行器
  • 调度中心通过 RPC 调用执行器(Executor),传递以下信息:

    • jobHandlerpullGuanjiaSalesJob(两个任务相同)。

    • jobParam:任务参数(如 type=daily 和 type=monthly)。

    • jobId:任务唯一ID(区分不同任务实例)。

  • 执行器会根据 jobId 和 jobParam 区分任务,即使 jobHandler 相同。

(2) 执行器线程池处理
  • 执行器接收到任务后,会提交到内置的线程池(默认核心线程数为 8)。

    • 默认并发执行:两个任务会由不同线程同时执行。

    • 串行执行:如果配置了 SERIAL_EXECUTION,则任务会排队依次执行。

(3) 任务方法执行

java

@XxlJob("pullGuanjiaSalesJob")
public ReturnT<String> pullGuanjiaSalesJob(String param) {if ("type=daily".equals(param)) {// 执行每日统计逻辑} else if ("type=monthly".equals(param)) {// 执行月度统计逻辑}return ReturnT.SUCCESS;
}
  • 通过 param 区分不同任务的业务逻辑。


3. 关键影响因素

(1) 阻塞策略(Block Strategy)
策略对相同 jobHandler 任务的影响
SERIAL_EXECUTION串行执行(按任务ID顺序,前一个完成后再触发下一个)。
DISCARD_LATER丢弃后续触发,只执行第一个到达的任务。
COVER_EARLY覆盖早期触发,只执行最新的一个任务。
(2) 执行器线程池配置
  • 线程池大小通过 xxl.job.executor.corePoolSize 配置(默认8)。

    • 若线程池已满,新任务会等待或丢弃(取决于配置)。


4. 执行流程示例

场景描述
  • 任务1jobId=1param=type=daily,阻塞策略为 SERIAL_EXECUTION

  • 任务2jobId=2param=type=monthly,阻塞策略为 SERIAL_EXECUTION

执行步骤
  1. 调度中心 在 3:00:00 同时检测到两个任务需触发。

  2. 由于 jobHandler 相同且阻塞策略为 SERIAL_EXECUTION,调度中心按 jobId 顺序触发:

    • 先触发 jobId=1type=daily),等待其执行完成。

    • 完成后触发 jobId=2type=monthly)。

  3. 执行器依次运行两个任务,通过 param 区分逻辑。


5. 如何避免问题?

(1) 确保参数可区分逻辑
  • 在 @XxlJob 方法内明确解析 param,避免逻辑冲突。

  • 示例:

    java

    @XxlJob("pullGuanjiaSalesJob")
    public ReturnT<String> execute(String param) {if (param == null) {return ReturnT.FAIL;}switch (param) {case "type=daily":// 每日逻辑break;case "type=monthly":// 月度逻辑break;}return ReturnT.SUCCESS;
    }
(2) 调整阻塞策略
  • 若任务需严格串行,配置 SERIAL_EXECUTION

  • 若允许并发,但需避免资源竞争,可在代码中加锁:

    java

    private final Object lock = new Object();@XxlJob("pullGuanjiaSalesJob")
    public ReturnT<String> execute(String param) {synchronized (lock) {// 业务逻辑}return ReturnT.SUCCESS;
    }
(3) 监控与日志
  • 在任务日志中记录 jobId 和 param,便于排查问题:

    java

    @XxlJob("pullGuanjiaSalesJob")
    public ReturnT<String> execute(String param) {log.info("Job started: jobId={}, param={}", XxlJobHelper.getJobId(), param);// 业务逻辑return ReturnT.SUCCESS;
    }

6. 总结

  • 调度机制:相同 CRON 的任务会同时触发,但执行顺序受阻塞策略控制。

  • 执行逻辑:通过 jobParam 区分任务,由执行器线程池并发或串行执行。

  • 最佳实践

    • 使用参数明确区分任务逻辑。

    • 关键任务配置 SERIAL_EXECUTION 避免并发问题。

    • 监控日志确保任务按预期执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94404.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94404.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94404.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【基于WAF的Web安全测试:绕过Cloudflare/Aliyun防护策略】

当Cloudflare或阿里云WAF矗立在Web应用前端&#xff0c;它们如同智能护盾&#xff0c;过滤恶意流量。然而&#xff0c;真正的Web安全测试不止于验证防护存在&#xff0c;更需挑战其边界——理解并模拟攻击者如何绕过这些先进防护&#xff0c;才能暴露深藏的风险。这不是鼓励攻击…

使用YOLOv8-gpu训练自己的数据集并预测

本篇将教学使用示例代码训练自己的数据集&#xff08;train&#xff09;以及预测&#xff08;predict&#xff09;。 目录 一、代码获取 二、训练 1、添加自己的训练集 2、创建训练集设置文件 3、 修改训练代码中数据集设置文件 4、开始训练 三、预测 1、 修改图片路径…

Transformer的并行计算与长序列处理瓶颈

Transformer相比RNN&#xff08;循环神经网络&#xff09;的核心优势之一是天然支持并行计算&#xff0c;这源于其自注意力机制和网络结构的设计.并行计算能力和长序列处理瓶颈是其架构特性的两个关键表现&#xff1a; 并行计算&#xff1a;指 Transformer 在训练 / 推理时通过…

LightRAG:大模型时代的低成本检索利器

LightRAG&#xff1a;大模型时代的低成本检索利器 大模型浪潮下&#xff0c;RAG 技术的困境与曙光 在科技飞速发展的当下&#xff0c;大语言模型&#xff08;LLMs&#xff09;已成为人工智能领域的璀璨明星。从最初惊艳世人的 GPT-3&#xff0c;到如今功能愈发强大的 GPT-4&…

spring boot开发中的资源处理等问题

文章目录一、RESTful 风格二、Spring Boot 静态资源处理三、Spring Boot 首页&#xff08;欢迎页&#xff09;四、PathVariable 注解五、拦截器&#xff08;Interceptor&#xff09;六、过滤器&#xff08;Filter&#xff09;七、触发器&#xff08;Trigger&#xff09;八、Han…

[2025CVPR-图象生成方向]ODA-GAN:由弱监督学习辅助的正交解耦比对GAN 虚拟免疫组织化学染色

​研究背景与挑战​ ​临床需求​ 组织学染色(如H&E和IHC)是病理诊断的核心技术,但IHC染色存在耗时、组织消耗大、图像未对齐等问题。 虚拟染色技术可通过生成模型将H&E图像转换为IHC图像,但现有方法面临两大挑战: ​染色不真实性​:生成图像与真实IHC的分布存在…

【Leetcode】2106. 摘水果

文章目录题目思路代码CJavaPython复杂度分析时间复杂度空间复杂度结果总结题目 题目链接&#x1f517; 在一个无限的 x 坐标轴上&#xff0c;有许多水果分布在其中某些位置。给你一个二维整数数组 fruits &#xff0c;其中 fruits[i] [positioni, amounti] 表示共有 amounti…

(CVPR 2024)SLAM卷不动了,机器人还有哪些方向能做?

关注gongzhonghao【CVPR顶会精选】众所周知&#xff0c;机器人因复杂环境适应性差、硬件部署成本高&#xff0c;对高效泛化一直需求迫切。再加上多传感器协同难题、真实场景数据获取不易&#xff0c;当下对迁移学习 机器人智能融合的研究也就更热烈了。不过显然&#xff0c;这…

Go语言 延 迟 语 句

延迟语句&#xff08;defer&#xff09;是Go 语言里一个非常有用的关键字&#xff0c;它能把资源的释放语句与申请语句放到距离相近的位置&#xff0c;从而减少了资源泄漏的情况发生。延迟语句是什么defer 是Go 语言提供的一种用于注册延迟调用的机制&#xff1a;让函数或语句可…

【go 】数组的多种初始化方式与操作

在 Go 语言中&#xff0c;数组是一种固定长度的数据结构&#xff0c;用于存储相同类型的元素。以下是 Go 中数组的多种初始化方式&#xff0c;结合搜索结果整理如下&#xff1a; &#xff08;一&#xff09;使用 var 关键字声明并初始化数组 使用 var 关键字声明数组时&#xf…

基于Java+MySQL 实现(Web)网上商城

悦桔拉拉商城1. 课设目的可以巩固自己之前所学的知识&#xff0c;以及学习更多的新知识。可以掌握业务流程&#xff0c;学习工作的流程。2. 开发环境硬件环境&#xff1a;Window11 电脑、Centos7.6 服务器软件环境&#xff1a;IntelliJ IDEA 2021.1.3 开发工具JDK 16 运行环境M…

高并发抢单系统核心实现详解:Redisson分布式锁实战

一、方法整体流程解析 #mermaid-svg-MROZ2xF7WaNPaztA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MROZ2xF7WaNPaztA .error-icon{fill:#552222;}#mermaid-svg-MROZ2xF7WaNPaztA .error-text{fill:#552222;strok…

Android12 User版本开启adb root, adb remount, su, 关闭selinux

开启adb root 直接看adb源码&#xff1a; __android_log_is_debuggable就是判断ro.debuggable属性值&#xff0c;感兴趣可以在 源码下grep下实现看看。auth_required :在adb源码下定义的全局变量&#xff0c;默认等于true,。看名字就是是否需要用户授权的flag, 这里不再继续跟…

金融专业高分简历撰写指南

一、金融求职简历原则&#xff1a;深度与亮点并存在金融行业求职时&#xff0c;一份出色的简历需突出经历深度与亮点。01 教育背景需如实填写毕业院校、专业、GPA及所学课程。金融行业不少公司对求职者学校和学历有严格标准&#xff0c;如“985”“211”院校或硕士以上学历等。…

专题:2025生命科学与生物制药全景报告:产业图谱、投资方向及策略洞察|附130+份报告PDF、原数据表汇总下载

原文链接&#xff1a;https://tecdat.cn/?p43526 过去一年&#xff0c;全球生命科学VC融资回暖至1021.5亿美元&#xff0c;并购交易虽下滑23%却聚焦关键赛道&#xff0c;创新药管线中GLP-1受体激动剂以170亿美元市场规模领跑&#xff0c;AI技术将研发周期缩短60%……这些数据背…

Compose笔记(四十)--ClickableText

这一节主要了解一下Compose中的ClickableText&#xff0c;在Jetpack Compose中&#xff0c;ClickableText是用于创建可点击文本的组件&#xff0c;其核心功能是通过声明式语法将文本设置为交互式元素&#xff0c;用户点击时可触发特定操作。简单总结如下:API含义 text&#xff…

面试必刷的数组三连:原地删除与合并

坚持用 清晰易懂的图解 多语言代码&#xff0c;让每道题变得简单&#xff01; 呆头个人主页详情 呆头个人Gitee代码仓库 呆头详细专栏系列 座右铭&#xff1a; “不患无位&#xff0c;患所以立。” 面试必刷的数组三连&#xff1a;原地删除与合并前言目录1.移除元素2.删除有序…

力扣经典算法篇-41-旋转图像(辅助数组法,原地旋转法)

1、题干 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a;输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]…

译|用户增长策略如何使用因果机器学习的案例

来自上传文件中的文章《[Causal Machine Learning for Growth: Loyalty Programs, LTV, and What to Do When You Can’t Experiment | by Torty Sivill | Towards AI]》 本文探讨了当 A/B 测试不可行时&#xff0c;如何利用因果推断从历史数据中获取洞察。技术亮点在于通过构建…

java~final关键字

final关键字final基本介绍final的使用细节final基本介绍 final是最终的意思&#xff0c;可以修饰类&#xff0c;属性&#xff0c;方法&#xff0c;局部变量什么时候会要使用到final呢&#xff1f; 1.想要类不被继承时 2.不希望类的某个属性的值被改变时 3.不想父类的某个方法被…