对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调度,像Quartz这种在web容器内部默认就自己启动了10个线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉,所以我一向排斥使用quartz。
quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
那么应该如何正确的使用quartz的同时,又不影响web容器自身的线程调度呢?
办法就是自己单独启动一个Job Server,来quartz跑job,不要部署在web容器中。
其他web节点当需要启动异步任务的时候,可以通过种种方式(DB, JMS, Web Service, etc)通知Job Server,而Job Server收到这个通知之后,把异步任务加载到自己的任务队列中去。
其实想改造当前已经集成quartz的web应用也不算困难:
例如可以使用数据库的表来记录和维护任务队列和状态,把quartz部分完全从web应用中剥离出去,自己写一个Java Main程序把配置quartz的spring容器跑起来,这样Job Server就启动了(注意这个Job Server完全脱离tomcat)。此外这个Main程序应该再启动一个子线程,定期扫描数据库的任务队列表:
有新的任务就加入quartz的任务调度;
把当前任务的执行状态写入任务表;
看到删除任务的表字段状态以后,删除相应的任务。
然后web应用去掉quartz部分配置,把原来的调用quartz任务的代码改写为读写数据库的任务表,这样就把job部分完全从web容器剥离掉了,甚至web容器做cluster也没有问题了,并且多个web节点在同时读写任务表的时候,还有数据库的事务来确保操作的一致性,实在是很棒。
另外还可以单独做一个job管理界面,可以通过web界面手工添加任务,查看任务状态,删除任务等等。
分享到:
相关推荐
这个标题“Quartz 定时WebForm和WinForm使用的dll”暗示了我们将在WebForm和WinForm应用中使用Quartz来实现定时功能。在.NET环境中,Quartz通过引入特定的DLL文件来实现其功能。 首先,我们要理解什么是DLL...
在使用Quartz时,确保正确引入所需的jar包至关重要,因为这些jar包包含了Quartz运行所需的所有类和资源。 1. **Quartz核心库**: 主要的jar包是`quartz.jar`,它包含了Quartz的核心组件,如Scheduler、Job、...
**Android Studio下的Quartz工程详解** ...通过正确配置和使用,Quartz可以成为Android应用的强大工具。不过,需要注意Android的特殊性,如主线程限制和生命周期管理,确保任务能够正常且高效地运行。
Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用...正确理解和使用这些SQL语句,有助于确保Quartz在各种数据库环境中稳定运行。
注意需要将 Quartz 的 JAR 包添加到类路径中,以便正确地使用 Quartz 的功能。 示例程序 Quartz 提供了一个 examples 文件夹,里面包含了官方提供的示例源代码。我们可以创建一个新的 Java 项目,并将 examples ...
Quartz是一款开源的作业调度框架,它允许开发者创建和管理作业计划,以便在特定时间执行任务。这个小结将深入探讨Quartz的...在实际项目中,正确使用Quartz可以大大提高系统的自动化程度,减少手动干预,提高工作效率。
正确设置并使用这些数据库表后,Quartz就可以在数据库中持久化作业和触发器的状态,即使应用程序重启,也能恢复之前设定的调度信息,实现任务的连续性和可靠性。 总之,"quartz quartz-1.8.6 dbTables" 提供了构建...
如果使用的是Spring Boot,可以在`application.properties`或`application.yml`中配置Quartz,并通过`@EnableScheduling`注解启用定时任务支持。 8. **动态管理定时任务** Spring提供的`SchedulerFactoryBean`...
在部署Quartz时,确保正确配置了Scheduler的数据库连接信息,这样Quartz才能正确地读取和写入这些表。同时,为了保证系统的稳定运行,建议定期备份这些表,以便在出现问题时能够快速恢复。 总结,创建Quartz表是...
Quartz是一款开源的作业调度框架,它允许开发者在Java应用程序中定义和执行复杂的定时任务。在Java应用开发中,Quartz常被用来自动化各种后台任务...正确理解和使用Quartz所需jar包,可以极大地提升你的项目管理效率。
Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它允许开发者灵活地定义作业和触发器,实现复杂的时间调度。...了解并正确使用这些脚本对于成功部署和维护Quartz系统至关重要。
Quartz.jar是一个非常重要的Java库,它主要用于计划和执行任务,特别是在企业级应用程序中。这个包包含了一系列的类和接口,使得开发者能够方便地...正确理解和使用Quartz,能极大地提高你的工作效率并优化系统运行。
以上就是使用Quartz.NET与SQL Server数据库连接的基本配置和使用步骤。通过这种方式,你可以利用Quartz的强大功能在SQL Server数据库的支持下实现复杂的时间调度逻辑。记住,配置和使用过程中要根据具体需求进行调整...
`quartz_job.sql`文件可能包含Quartz所需的数据库表结构,Quartz使用数据库来存储Job和Trigger的信息,以便在系统重启后仍能恢复之前设置的任务。你需要根据自己的数据库类型(如MySQL、Oracle等)对这个SQL脚本进行...
总的来说,Quartz数据库脚本是实现Quartz在不同数据库环境下的关键组件,它们使得开发者能够在不修改Quartz源码的情况下,方便地在各种数据库系统中部署和使用作业调度服务。这不仅提高了灵活性,也降低了项目维护的...
Spring Quartz 动态配置时间 Spring Quartz 是一个功能强大的任务调度框架,...使用 Spring Quartz 实现动态配置时间可以提高系统的灵活性和可维护性,但需要正确地选择时间规则、转换时间规则和记录时间规则表达式。
Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC...正确配置和使用这两个框架,能够为企业的后台服务带来极大的灵活性和可维护性。
总之,正确地在各种数据库上设置Quartz的表结构是确保任务调度系统正常运行的基础。请务必仔细阅读官方文档,以获取最新的建表语句和配置指南,因为随着Quartz版本的更新,这些信息可能会有所变化。同时,不要忘记在...
这个实例可以立即运行,展示了如何在实际应用中配置和使用Quartz。 Quartz的核心概念包括作业(Job)、触发器(Trigger)和调度器(Scheduler)。作业是你要执行的任务,而触发器定义了任务何时运行。调度器则负责...
Quartz 的基本配置对于正确设置和管理调度器至关重要,它允许用户定制调度器的行为以满足特定的需求。 在配置 Quartz 时,主要关注以下几个关键设置: 1. **org.quartz.scheduler.instanceName**:这个属性用于...