`
robbin
  • 浏览: 4826307 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:137498
社区版块
存档分类
最新评论

应该如何正确使用Quartz

    博客分类:
  • Java
阅读更多
对于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界面手工添加任务,查看任务状态,删除任务等等。

分享到:
评论
8 楼 mingisme 2006-12-29  
引用
使用crontab更简单一些,也不容易出问题


不知是否指的是Linux或Unix的Crontab,是的话,调用方式应该是启动n个main函数,每个main函数都启动一个Spring容器,然后里面调用Quartz,似乎更烦.
7 楼 imcaptor 2006-12-28  
使用crontab更简单一些,也不容易出问题
6 楼 sim114 2006-12-27  
引用

对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调度,像Quartz这种在web容器内部默认就自己启动了10个线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉,所以我一向排斥使用quartz。


开几个线程是管理的问题

引用

quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。

其他web节点当需要启动异步任务的时候,可以通过种种方式(DB, JMS, Web Service, etc)通知Job Server,而Job Server收到这个通知之后,把异步任务加载到自己的任务队列中去。


我不知道有什么问题是在web容器内启动,而不支持cluster,既然你已经使用了以上方式同步各个节点。也许你能给我一个示例?



我也认同:另开一个桌面应用,复杂度加大了很多.特别是对服务器管理方面,多一事不如少一事
一个类似的例子是 直接在启动类里新开一个端口, 运行一个服务器程序


我觉得真正的问题是 需要异步操作的通常都是运行时间长,比较耗费资源,放在web容器可能容易使web容器崩溃,这倒是一个需要斟酌的地方

5 楼 kingsword 2006-12-27  
我在javaeye刚注册了一个用户,可是一直没收到邮件,怎么回事啊?
4 楼 robbin 2006-12-27  
引用
感觉,另开一个桌面应用,复杂度加大了很多.


这是windows的思维,事实上,把同步异步搞在一起,才真正增加了过多的复杂度。
3 楼 mingisme 2006-12-27  
感觉,另开一个桌面应用,复杂度加大了很多.
2 楼 robbin 2006-12-27  
不行,2个tomcat内部的quartz任务不同步
1 楼 mingisme 2006-12-27  
引用
quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。

一个Apatch + 2个tomcat在同一台Server上的负载均衡应该支持吧?

相关推荐

    Quartz 定时WebForm和WinForm使用的dll

    这个标题“Quartz 定时WebForm和WinForm使用的dll”暗示了我们将在WebForm和WinForm应用中使用Quartz来实现定时功能。在.NET环境中,Quartz通过引入特定的DLL文件来实现其功能。 首先,我们要理解什么是DLL...

    使用quartz需要的jar包

    在使用Quartz时,确保正确引入所需的jar包至关重要,因为这些jar包包含了Quartz运行所需的所有类和资源。 1. **Quartz核心库**: 主要的jar包是`quartz.jar`,它包含了Quartz的核心组件,如Scheduler、Job、...

    Android studio下的quartz工程

    **Android Studio下的Quartz工程详解** ...通过正确配置和使用,Quartz可以成为Android应用的强大工具。不过,需要注意Android的特殊性,如主线程限制和生命周期管理,确保任务能够正常且高效地运行。

    quartz-2.2.3版本的quartz初始化sql语句

    Quartz是一款广泛使用的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Quartz 2.2.3版本中,初始化数据库是使用...正确理解和使用这些SQL语句,有助于确保Quartz在各种数据库环境中稳定运行。

    quartz-1.6.5使用手册

    注意需要将 Quartz 的 JAR 包添加到类路径中,以便正确地使用 Quartz 的功能。 示例程序 Quartz 提供了一个 examples 文件夹,里面包含了官方提供的示例源代码。我们可以创建一个新的 Java 项目,并将 examples ...

    Quartz使用小结

    Quartz是一款开源的作业调度框架,它允许开发者创建和管理作业计划,以便在特定时间执行任务。这个小结将深入探讨Quartz的...在实际项目中,正确使用Quartz可以大大提高系统的自动化程度,减少手动干预,提高工作效率。

    quartz quartz-1.8.6 dbTables 建表sql

    正确设置并使用这些数据库表后,Quartz就可以在数据库中持久化作业和触发器的状态,即使应用程序重启,也能恢复之前设定的调度信息,实现任务的连续性和可靠性。 总之,"quartz quartz-1.8.6 dbTables" 提供了构建...

    关于spring中quartz的配置

    如果使用的是Spring Boot,可以在`application.properties`或`application.yml`中配置Quartz,并通过`@EnableScheduling`注解启用定时任务支持。 8. **动态管理定时任务** Spring提供的`SchedulerFactoryBean`...

    quartz创建表sql

    在部署Quartz时,确保正确配置了Scheduler的数据库连接信息,这样Quartz才能正确地读取和写入这些表。同时,为了保证系统的稳定运行,建议定期备份这些表,以便在出现问题时能够快速恢复。 总结,创建Quartz表是...

    Quartz所需jar包

    Quartz是一款开源的作业调度框架,它允许开发者在Java应用程序中定义和执行复杂的定时任务。在Java应用开发中,Quartz常被用来自动化各种后台任务...正确理解和使用Quartz所需jar包,可以极大地提升你的项目管理效率。

    quartz_2.3.0 SQL脚本

    Quartz 是一个开源的作业调度框架,广泛应用于Java应用程序中,用于执行定时任务。它允许开发者灵活地定义作业和触发器,实现复杂的时间调度。...了解并正确使用这些脚本对于成功部署和维护Quartz系统至关重要。

    quartz.jar包下载

    Quartz.jar是一个非常重要的Java库,它主要用于计划和执行任务,特别是在企业级应用程序中。这个包包含了一系列的类和接口,使得开发者能够方便地...正确理解和使用Quartz,能极大地提高你的工作效率并优化系统运行。

    quartz实例sqlserver数据库连接

    以上就是使用Quartz.NET与SQL Server数据库连接的基本配置和使用步骤。通过这种方式,你可以利用Quartz的强大功能在SQL Server数据库的支持下实现复杂的时间调度逻辑。记住,配置和使用过程中要根据具体需求进行调整...

    Java使用quartz实现任务调度定时任务

    `quartz_job.sql`文件可能包含Quartz所需的数据库表结构,Quartz使用数据库来存储Job和Trigger的信息,以便在系统重启后仍能恢复之前设置的任务。你需要根据自己的数据库类型(如MySQL、Oracle等)对这个SQL脚本进行...

    quartz数据库脚本

    总的来说,Quartz数据库脚本是实现Quartz在不同数据库环境下的关键组件,它们使得开发者能够在不修改Quartz源码的情况下,方便地在各种数据库系统中部署和使用作业调度服务。这不仅提高了灵活性,也降低了项目维护的...

    Spring Quartz如何动态配置时间

    Spring Quartz 动态配置时间 Spring Quartz 是一个功能强大的任务调度框架,...使用 Spring Quartz 实现动态配置时间可以提高系统的灵活性和可维护性,但需要正确地选择时间规则、转换时间规则和记录时间规则表达式。

    spring+quartz使用jar包

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC...正确配置和使用这两个框架,能够为企业的后台服务带来极大的灵活性和可维护性。

    quartz各种数据库的建表语句

    总之,正确地在各种数据库上设置Quartz的表结构是确保任务调度系统正常运行的基础。请务必仔细阅读官方文档,以获取最新的建表语句和配置指南,因为随着Quartz版本的更新,这些信息可能会有所变化。同时,不要忘记在...

    quartz实例

    这个实例可以立即运行,展示了如何在实际应用中配置和使用Quartz。 Quartz的核心概念包括作业(Job)、触发器(Trigger)和调度器(Scheduler)。作业是你要执行的任务,而触发器定义了任务何时运行。调度器则负责...

    quartz

    Quartz 的基本配置对于正确设置和管理调度器至关重要,它允许用户定制调度器的行为以满足特定的需求。 在配置 Quartz 时,主要关注以下几个关键设置: 1. **org.quartz.scheduler.instanceName**:这个属性用于...

Global site tag (gtag.js) - Google Analytics