当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

<b>在Java Web操纵中若何实现任务有效调度</b>[Java编程]

赞助商链接



  本文“<b>在Java Web操纵中若何实现任务有效调度</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

为什么需求任务调度?

在web利用中,大大都任务是以一种"避免用户长时间等候"的方法完成的.在Google搜索这样的例子中,削减等候时间对用户体验来说至关重要.异步任务的一种办理筹划是在用户提交后生成一个线程(来处理异步任务),但这也不能办理那些需求以一按时间隔断反复运行任务、或在每天的指按时间运行任务的情形.

让我们从一个数据库报表的例子来看看任务调度能若何帮忙改进系统计划.报表大概是扑朔迷离的,这取决于用户所需数据的种类,以及能否需求从一个或多个数据库汇集大量数据.用户大概需求很长时间来运行这样的"按需"报表.因此,我们向这个报表示例中增添任务调度机制,以便用户可以安置在任何他们需求的时间生成报表,并以PDF或其他格局在email中发送.用户可以让报表在每天的清晨2:22,系统正处于低负荷时运行;也可以挑选只在特按时间运行一次.通过在报表利用中加入任务调度,我们可认为产品增添一项有效的功效,并改进用户体验.

幸运的是,有一个强盛的开源办理筹划可以让我们以尺度的方法在web利用(或任何Java利用)中实施任务调度.以下示例展示了在web利用中,若何利用Quartz来成立一个任务调度框架.这个示例还利用了Struts Action framework 插件,以便在web利用启动时初始化任务调度机制.Struts是最常见的MVC框架,为大大都开辟人员所熟习.当然除此之外还有很多框架可以帮忙在web利用中实现MVC情势.

启动时初始化任务调度器

我们首先要做的是成立一个Struts插件,让它在容器启动时成立我们的任务调度器.在以下例子中,我们挑选Tomcat作为web利用容器,不过这些示例在其他容器中也该当可以运行.我们要成立一个Struts插件类,并在struts-config.xml中加入几行代码以使之可以工作.

这个插件有两个可配置的初始化参数:startOnLoad指定能否要在容器启动时当即启动任务调度器,而 startupDelay指定启动任务调度器之前的等候时间.启动延时很有效,因为我们大概需求首先履行一些更重要的初始化步骤.此外还可以利用listener机制,以更复杂的方法来告诉SchedulerPlugIn什么时刻启动Quartz Scheduler.

<PLUG-IN className="SchedulerPlugIn">
<SET-PROPERTY property="startOnLoad" value="false" />
<SET-PROPERTY property="startupDelay" value="0" />
</PLUG-IN>

我们要成立的是一个实现Struts插件接口org.apache.struts.action.PlugIn的单子类SchedulerPlugIn.Struts会按照配置文件中呈现的次序初始化各个插件.要分外注意的是init()办法中的代码,在此我们初始化了所需的Quartz对象,并得到Scheduler.我们的任务信息就要提交到此org.quartz.Scheduler对象,后者将在随后谈论.Scheduler对象由Quartz servlet按照其配置初始化,就像Struts初始化它的ActionServlet类一样.让我们来看init()办法:

public void init(ActionServlet actionServlet,
ModuleConfig moduleConfig) {
System.out.println("Initializing Scheduler PlugIn for Jobs!");
// Retrieve the ServletContext
// 获得ServletContext
ServletContext ctx = actionServlet.getServletContext();
// The Quartz Scheduler
// Quartz Scheduler对象
Scheduler scheduler = null;
// Retrieve the factory from the ServletContext.
// It will be put there by the Quartz Servlet
// 从ServletContext获得由Quartz Servlet安排在此的factory对象.
StdSchedulerFactory factory = (StdSchedulerFactory)
ctx.getAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY);
try{
// Retrieve the scheduler from the factory
// 从factory获得scheduler
scheduler = factory.getScheduler();
// Start the scheduler in case, it isn't started yet
// 假如scheduler还没有启动,则启动它
if (m_startOnLoad != null &&
m_startOnLoad.equals(Boolean.TRUE.toString())){
System.out.println("Scheduler Will start in " +
m_startupDelayString + " milliseconds!");
//wait the specified amount of time before
// starting the process.
// 在启动之前等候指定长度的时间
Thread delayedScheduler =
new Thread(new DelayedSchedulerStarted (
scheduler, m_startupDelay));
//give the scheduler a name. All good code needs a name
//给任务调度器命名.好的代码总该闻名字!
delayedScheduler.setName("Delayed_Scheduler");
//Start out scheduler
//启动任务调度器
delayedScheduler.start();
}
} catch (Exception e){
e.printStackTrace();
}
sm_scheduler = scheduler;
}


  以上是“<b>在Java Web操纵中若何实现任务有效调度</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .