Quartz动态设置并发数量

源码仓库:Gitee·GitHub

quartz存在一个问题,当正在进行的任务已经达到了设置的个数,后续触发的任务没有线程可用,会导致系统宕机;

Quartz通过StdSchedulerFactory工厂创建调度器,initialize方法通过解析quartz.properties配置信息进行加载,默认线程个数为10,可以通过覆盖信息定义线程个数,通过Apollo信息进行线程个数配置

Scheduler scheduler = (new StdSchedulerFactory()).getScheduler(); //获取Apollo配置信息 Config config = ConfigService.getConfig("application"); String threadCount = config.getProperty("org.quartz.threadPool.threadCount", ""); //对quartz.properties配置信息进行覆盖 Properties props = new Properties(); InputStream in = TaskScheduleServiceImpl.class.getClassLoader().getResourceAsStream("quartz.properties"); props.load(in); String threadCountProperties = props.get("org.quartz.threadPool.threadCount").toString(); if ("".equals(threadCount)) { if (!threadCount.equals(threadCountProperties)) { props.setProperty("org.quartz.threadPool.threadCount", threadCount); //重新创建调度器 StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory(); stdSchedulerFactory.initialize(props); //关闭原先调度器 scheduler.shutdown(); scheduler = stdSchedulerFactory.getScheduler(); in.close(); } }

上面代码是在系统初始化中执行的,若想实现系统运行中进行动态扩容/缩容调度器线程池大小,可以加一个flag标志进行判断,通过获取当前系统正在执行的任务个数和系统定义的总数进行对比,当达到一定个数或一定比例时,再次调用上面代码进行动态扩容/缩容。

上面代码存在的问题是当关闭调度器时,会杀死原先存在正在进行的任务,这是不友好的操作,可以添加一个中间件(Redis),将每次触发执行的任务加入Redis中,执行完从Redis删除,所以每次系统重启都从Redis读取数据,对任务重新执行,执行完再将其从Redis删除,同时为了保证任务的唯一性(集群环境下不管是定时还是立即执行),需要对任务进行加锁操作,由于只需要保证同一时刻只能有一个任务在运行,保证高可用而不追求强一致性,所以选择的是Redis分布式锁Redisson,根据先到先得策略使用了Redisson的公平锁。

相关新闻

AI Agent ROI评估指南:从成本结构到收益测算全解析

AI Agent ROI评估指南:从成本结构到收益测算全解析

1. 先别急着算账,想清楚AI Agent的ROI和传统IT项目有什么不同这两年不少公司都开始折腾AI Agent,有的把它接到客服系统,有的让它帮着写代码,还有的用它处理合同和报表。但当你真坐下来算这笔账时,会发现一个尴尬的问题…

2026/10/21 2:48:00 阅读更多 →
基于卷积神经网络的食物图像识别实战:从ResNet迁移学习到部署

基于卷积神经网络的食物图像识别实战:从ResNet迁移学习到部署

简介:基于卷积神经网络的食物图像识别项目完整代码与数据包,面向具备Python基础并希望实践CNN图像分类的开发者与学习者。资源围绕TensorFlow与tf.keras构建食物识别模型,涵盖数据预处理、网络定义、训练评估与预测全流程,并引入迁…

2026/10/21 2:48:00 阅读更多 →
SECS-II/HSMS调试工具实战:从协议原理到模拟器应用

SECS-II/HSMS调试工具实战:从协议原理到模拟器应用

简介:面向半导体制造与MES系统集成场景,这份SECS-II HSMS调试工具模拟器适合设备工程师、上位机开发人员使用。它可模拟客户端与服务端,用于验证自定义程序是否符合SECS-II通信标准,减少现场联调时的错误与返工。压缩包为rar格式&…

2026/10/21 2:48:00 阅读更多 →

最新新闻

芯片烧录上位机实操指南:错误代码分类排查与产线稳定避坑

芯片烧录上位机实操指南:错误代码分类排查与产线稳定避坑

Flashrunner这种上位机,操作界面上看起来就是几个窗口、几个按钮,但真正在产线或者实验室里跑起来,你会发现它背后牵扯的东西远比想象中多。芯片型号匹配、通信稳定性、目标文件格式、供电质量,甚至是一根USB线的好坏,…

2026/10/21 4:12:41 阅读更多 →
Linux下Node.js安装与环境变量配置:从PATH原理到cnpm全局安装

Linux下Node.js安装与环境变量配置:从PATH原理到cnpm全局安装

前两天刚在群里帮一个朋友排查问题,他下载了 Node.js 压缩包,解压后心里想着装好了,结果在终端里敲node -v,系统只回了一句command not found。这种场景我见过太多次:教程里写着“安装 Node.js 并配置环境变量”&#…

2026/10/21 4:12:41 阅读更多 →
轻量级可编程地图交互组件:lingbot-map设计与实践

轻量级可编程地图交互组件:lingbot-map设计与实践

1. 项目概述:一个轻量级、可嵌入的地理信息交互组件“lingbot-map”这个名字一出现,我就下意识在终端里敲了npm search lingbot-map和pypi search lingbot-map——结果是空的。再查 GitHub、GitLab 和国内主流开源平台,也没有匹配的公开仓库。…

2026/10/21 4:12:41 阅读更多 →
知识工作流自动化实践:用插件搭建输入到输出的完整闭环

知识工作流自动化实践:用插件搭建输入到输出的完整闭环

knowledge-work-plugins 这套东西,我断断续续折腾了小半年,从最初的几个零散脚本,到后来慢慢攒成一个像样的工具集,中间踩过的坑、推翻重来的设计,都挺值得拿出来聊聊的。很多做知识管理的人,工具换了一茬又…

2026/10/21 4:12:41 阅读更多 →
Kafka分区机制:高并发吞吐的基石与生产实践

Kafka分区机制:高并发吞吐的基石与生产实践

刚开始接触Kafka时,我对分区(Partition)的认知只停留在“一个Topic可以拆成多个分区”这个层面,直到某次压测让我吃了大亏:三个Broker的集群,Topic只建了三个分区,消费者组里却启动了九个消费线…

2026/10/21 4:12:41 阅读更多 →
lingbot-map:轻量级语义化地图交互组件设计与实践

lingbot-map:轻量级语义化地图交互组件设计与实践

1. 项目概述:一个轻量级、可嵌入的地理信息交互组件“lingbot-map”这个名字一出现,我就下意识在终端里敲了npm search lingbot-map和pypi -s lingbot-map——结果是空的。再查 GitHub、GitLab 和国内主流代码托管平台,也没有匹配的公开仓库。…

2026/10/21 4:11:41 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →