最近发现个问题,不知道是使用不当还是何种原因造成的。
具体内容:
用Quartz调度任务,周期10分钟。但具体业务执行的时间要大于10分钟。Quartz线程池的配置是缺省,查了一下10个大小。
现象,运行一段时间后,Quartz的线程池中9个线程的状态是Waiting on Condition,一个是runnable。整进程的状态貌似停住了,调度时间到了,没有执行高度线程中的代码。
怀疑,由于业务操作的时候大于10分钟(调度周期),可能会导致(猜的)Quartz的线程池中的线程还在处理业务,一次调度结束但实际业务操作还在运行(指在调度的线程池中运行),运行一段时间后这样的线程变多,导致无法响应下一次调度。
解决办法,目前设想的是,具体的业务,在另一个线程池中完成而不使用Quartz的线程池做具体业务操作,每一次调度线程只把任务放到具体执行线程池中,就结束。
继续上面说的,把一个实际基于FTP的文件定时扫描发送程序按上述思路调整了下。
调整前:
调度执行内容:
1.扫述表找到要转发的文件到LIST
2.遍历LIST,顺序发送文件。
调整后:
调度执行内容:
1.扫述表找到要转发的文件到LIST
2.遍历LIST,以每个元素构造转发Thread并提交到线程池。(或者设个最大转发数来控制同时转发的数量)
最后的结论不知道是否正确,业务操作时间较长的话,不要在调试本身的线程池中做。
分享到:
相关推荐
Quartz是一个开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java应用中,Quartz常被用来实现复杂的时间调度逻辑,比如定时发送邮件、执行数据同步等。在很多场景下,我们可能需要动态地修改任务的...
Quartz开发使用说明文档 Quartz是一个功能强大且广泛应用的开源作业调度框架,主要用于实现业务逻辑中的定时任务、批处理、事件触发等场景。Quartz的主要特点是高可用性、可扩展性、灵活配置、支持多种数据库和集群...
这个标题“Quartz 定时WebForm和WinForm使用的dll”暗示了我们将在WebForm和WinForm应用中使用Quartz来实现定时功能。在.NET环境中,Quartz通过引入特定的DLL文件来实现其功能。 首先,我们要理解什么是DLL...
总的来说,使用ASP.NET、Quartz.NET和TopShelf的组合,开发者可以构建出一个高效、稳定且易于维护的任务调度系统,对于需要后台自动化处理的工作场景,这是一种非常实用的解决方案。在实际应用中,可以根据具体需求...
在本教程中,我们将深入探讨如何在Spring Boot环境中配置和使用Quartz,以及解决服务注入和服务层传参的问题。 首先,让我们了解Spring Boot与Quartz的集成基础。要在Spring Boot项目中引入Quartz,我们需要在`pom....
Quartz和IIS是两种在IT领域中广泛使用的工具,它们分别用于任务调度和Web服务管理。这篇内容将深入探讨这两个概念以及如何解决IIS闲置时间的问题。 首先,让我们了解Quartz。Quartz是一个开源的Java作业调度框架,...
在使用Quartz时,确保正确引入所需的jar包至关重要,因为这些jar包包含了Quartz运行所需的所有类和资源。 1. **Quartz核心库**: 主要的jar包是`quartz.jar`,它包含了Quartz的核心组件,如Scheduler、Job、...
在Android Studio中使用Quartz,可以为应用程序添加定时执行的任务功能,例如定期发送通知、更新数据或者执行后台服务。下面我们将深入探讨如何在Android Studio中集成并使用Quartz。 ### 1. Quartz简介 Quartz是...
Quartz 是一个开源的作业调度框架,常用于Java应用程序中,用于执行定时任务。它具有高度的可配置性和可扩展性,支持CRON表达式、简单触发器和复合触发器等多种触发方式。集群(Cluster)是指多台服务器共享任务调度...
### quartz在集群环境下的最终解决方案 #### 背景与挑战 随着系统复杂度的提高以及业务需求的变化,越来越多的应用程序需要支持高可用性和可扩展性。为了满足这些需求,通常会选择将应用程序部署在集群环境中。...
Spring整合Quartz是一款常见的任务调度解决方案,它允许开发者在应用程序中安排定时任务的执行。Quartz是一个开源的作业调度框架,而Spring通过提供一个简洁的API使得与Quartz的集成变得简单。以下是对Spring整合...
8. **应用层解决方案**:如果Quartz的内置机制不足以满足需求,可以在应用层面添加额外的锁机制,如分布式锁(Redis、Zookeeper等),在任务开始前检查是否已有其他实例在执行,确保互斥。 9. **任务幂等性**:设计...
### 使用Quartz实现定时功能 #### 一、Quartz简介 Quartz是一个全面的、开源的作业调度器,被广泛应用于Java应用程序中进行任务调度。Quartz提供了强大的调度能力,可以满足不同场景的需求,比如定时执行任务、...
Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用Quartz的关键步骤,因为Quartz依赖于一个持久化存储来保存作业和触发器的信息...
Quartz 1.6.5 使用手册概述 Quartz 是一个功能强大且灵活的开源作业调度框架,广泛应用于各种企业级应用程序中。以下是 Quartz 1.6.5 使用手册的概述和相关知识点总结。 环境准备 在开始使用 Quartz 之前,需要...
quartz定时任务使用例子大全,这里面介绍了三种使用quartz定时任务的方式,第一种方式是完全使用代码写死的调用方式,第二种使用的是从数据库读取任务配置信息的调用方式,第三种是使用从数据库读取任务配置,生成...
这个小结将深入探讨Quartz的核心概念、使用场景以及如何与Spring框架集成。 一、Quartz简介 Quartz是由Caledonia Software公司开发的Java定时任务库,它提供了一种高度可配置的方式来安排和执行工作。Quartz支持...
标题和描述中提到的主题是关于Quartz任务调度系统的使用培训。Quartz是一个开源的任务调度库,其主要用途是让开发者能够轻松地安排在特定时间或根据特定规则运行代码的任务,也就是作业(Jobs)。Quartz能够与Java...
下面将详细讨论如何在.NET Core中集成并使用Quartz.NET。 首先,安装必要的依赖。在你的.NET Core项目中,你可以通过NuGet包管理器或命令行工具安装Quartz.NET。运行以下命令: ```bash dotnet add package Quartz...