- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
为何需要义务调剂?
为何需要任务调度?
任务调度是大型中常见的工作。开发者希望以指定的间隔时间执行各类操作,并完成一些无需用户输入的任务。中可有无数方法来做到这一点,但是在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.e
文档评论(0)