为何需要任务调度?文库.docVIP

  • 1
  • 0
  • 约4.45千字
  • 约 5页
  • 2016-03-01 发布于江苏
  • 举报
为何需要任务调度?文库.doc

任务调度是大型中常见的工作。开发者希望以指定的间隔时间执行各类操作,并完成一些无需用户输入的任务。中可有无数方法来做到这一点,但是在web应用中却并没有这方面的统一标准。当许多开发人员参与同一个项目,并且以各自不同的方式来实现任务调度时,就可能产生很大问题。内存和同步问题就是必须首先考虑的两件事。事实上,一些开发者试图调用层面的任务调度机制,如平台上的cron。这种编程实践也许并不是太坏,但它将直接导致可移植性被抛到九霄云外。 ChrisHardin;Caesar 原文: 关键字:Quartz;scheduling 为何需要任务调度? 在web应用中,大多数任务是以一种防止用户长时间等待的方式完成的。在搜索这样的例子中,减少等待时间对用户体验来说至关重要。异步任务的一种是在用户提交后生成一个线程(来处理异步任务),但这也不能解决那些需要以一定时间间隔重复运行任务、或在每天的指定时间运行任务的情况。 让我们从一个报表的例子来看看任务调度能如何帮助改善系统设计。报表可能是错综复杂的,这取决于用户所需数据的种类,以及是否需要从一个或多个数据库收集大量数据。用户可能需要很长时间来运行这样的按需报表。因此,我们向这个报表示例中添加任务调度机制,以便安排在任何他们需要的时间生成报表,并以PDF或其他格式在email中发送。用户可以让报表在每天的凌晨2:22,系统正处于低负荷时运行;也可以选择只在特定时间运行一次。通过在报表应用中加入任务调度,我们可以为产品添加一项有用的功能,并改善用户体验。 幸运的是,有一个强大的开源解决方案可以让我们以标准的方式在web应用(或任何Java应用)中实施任务调度。以下示例展示了在web应用中,如何使用Quartz来创建一个任务调度框架。这个示例还使用了Actionframework插件,以便在web应用启动时初始化任务调度机制。Struts是最常见的MVC框架,为大多数开发人员所熟悉。当然除此之外还有许多框架可以协助在web应用中实现MVC模式。 启动时初始化任务调度器 我们首先要做的是建立一个Struts插件,让它在容器启动时创建我们的任务调度器。在以下例子中,我们选择Tomcat作为web应用容器,不过这些示例在其他容器中也应当可以运行。我们要创建一个Struts插件类,并在struts-config.xml中加入几行代码以使之可以工作。 这个插件有两个可的初始化参数:startOnLoad指定是否要在容器启动时立即启动任务调度器,而startupDelay指定启动任务调度器之前的等待时间。启动延时很有用,因为我们可能需要首先执行一些更重要的初始化步骤。此外还可以使用listener机制,以更复杂的方式来通知SchedulerPlugIn何时启动QuartzScheduler。<PLUG-INclassName=SchedulerPlugIn <SET-PROPERTYproperty=startOnLoadvalue=false/ <SET-PROPERTYproperty=startupDelayvalue=0/ </PLUG-IN 我们要创建的是一个实现Struts插件接口org.apache.struts.action.PlugIn的单子类SchedulerPlugIn。Struts会按照中出现的顺序初始化各个插件。要特别注意的是init方法中的代码,在此我们初始化了所需的Quartz对象,并得到Scheduler。我们的任务就要提交到此org.quartz.Scheduler对象,后者将在随后讨论。Scheduler对象由Quartzservlet根据其配置初始化,就像Struts初始化它的ActionServlet类一样。让我们来看init方法: publicvoidinit }catch sm_scheduler=scheduler; } 配置过程的第二步是在web.xml中加入用来初始化Quartzservlet(org.quartz.ee.servlet.QuartzInitializerServlet)的内容,因为需要它将SchedulerFactory添加到ServletContext中,以便在我们的Struts插件中可以访问。SchedulerFactory就是我们在Struts插件中获得Scheduler对象的来源。除了struts-config.xml和web.xml之外,还要在web应用的classes目录下放置一个perties文件。此文件的位置也可以在web.xml中作为QuartzInitializerServlet的启动参数来指定。 QuartzInitializer QuartzInitializerServlet org.quartz.ee.servlet.

文档评论(0)

1亿VIP精品文档

相关文档