`
pengyan
  • 浏览: 36384 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何在Web应用中启动后台任务

阅读更多

摘要
  
  我们常常在Web应用中需要启动一个自己写的服务,本文的目的是给你提供一个解决方案。
  
  原理
  
   本方案的原理是写一个实现了ServletContextListener接口的类,该类中有两个方法:public void contextInitialized(ServletContextEvent sce),它是在应用启动时调用;另一个方法是:public void contextDestroyed(ServletContextEvent sce),该方法是在应用结束时调用。把我们要启动的后台应用逻辑放在contextInitialized方法中实现;把释放后台应用占用资源的工作放 在contextDestroyed来处理。但我们启动的后台任务常常是有要求的,比如时间,频率等,我在这里使用了一个开源组件:quartz。
  
  步骤
  
  1.写业务调用类:
  
  // DumbJob.java
  import org.quartz.*;
  import java.util.*;
  public class DumbJob implements Job {
  public DumbJob() {
  }
  public void execute(JobExecutionContext context)
  throws JobExecutionException
  {
  //在这里写业务处理代码。什么,你不知道?那你别问我!!:-<
  }
  }
  
  本类的主要功能是由quartz中调度类按照指定的规则进行调用执行必要的业务逻辑。
  
  2.写调度类
  
  // TestShedule.java
  import org.quartz.*;
  import java.util.*;
  
  public class TestShedule{
  static SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
  static Scheduler sched;
  
  public static void run()throws Exception{
  sched = schedFact.getScheduler();  //获取 调度管理器
  JobDetail jobDetail = new JobDetail("myJob",
  sched.DEFAULT_GROUP,
  DumbJob.class);//创建工作
  CronTrigger trigger = new CronTrigger("myTrigger","test","0/10 * * * * ?");//创建触发器
  sched.scheduleJob(jobDetail, trigger);  //添加到调度管理器中
  sched.start();//启动调度管理器
  }
  
  public static void   stop()throws Exception{
  sched.shutdown();
  }
  }
  本类的目的是设置调用规则,在这里我用了“0/10 * * * * ?”表示每10秒钟就执行一次,有关表达式的说明请参阅quartz的api文档。
  
  3.编写服务启动类:
  
  //ServiceLoader.java
  import javax.servlet.ServletContextEvent;
  import javax.servlet.ServletContextListener;
  
  public class ServiceLoader implements ServletContextListener {
  public void contextInitialized(ServletContextEvent sce) {
  try{
  TestShedule.run();
  }catch(Exception ex){
  System.out.println(ex.getMessage());
  }
  }
  
  public void contextDestroyed(ServletContextEvent sce) {
  try{
  TestShedule.stop();
  }catch(Exception ex){
  System.out.println(ex.getMessage());
  }
  }
  }
  在contextInitialized中调用TestShedule.run()启动后台任务;在contextDestroyed中调用TestShedule.stop()停止后台任务。
  
  4.部署服务启动类
  
  在web.xml文件中增加如下一行配置
  <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
  <web-app id="WebApp">
  <display-name>root</display-name>
  <!--下边的listener部分就是配置信息-->
  <listener>
  <listener-class>ServiceLoader </listener-class>
  </listener>
  <welcome-file-list>
  <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  </web-app>
  
  5.启动web服务即可。
  
  总结
  
  其实实现这个功能的方法很多,我在这里是应用了ServletContextListener接口和开源api quartz,希望能对你的开发有所帮助。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    如何在Web应用中去启动后台的任务

    【如何在Web应用中启动后台任务】 在Web应用程序开发中,有时我们需要在应用程序启动时自动运行某些服务或任务,例如定时任务、数据同步等。本文将介绍一种利用Servlet上下文监听器(ServletContextListener)和...

    在Java Web应用中如何实现任务有效调度

    这个插件在Web应用启动时会被调用,通过配置参数如`startOnLoad`和`startupDelay`来控制调度器的启动时间和延迟。 下面是一个简单的插件配置示例: ```xml ``` 接着,我们需要创建一个名为`SchedulerPlugIn...

    Spring定时任务实现(非Web项目)

    `@EnableScheduling`注解会启动一个后台任务调度器,定期检查是否存在需要运行的`@Scheduled`方法。 2. **定义定时任务**:在需要执行定时任务的类上,我们可以定义一个或多个`@Scheduled`注解的方法。例如: ```...

    WEB应用程序定时执行任务

    综上所述,通过C#的定时任务和Windows服务自启动,我们可以构建一个能够后台运行,即使在网站关闭时也能持续执行的WEB应用程序定时任务系统。这样的系统对于监控、自动化工作流或者定期维护操作非常有用,能够大大...

    在电子中运行后台任务的示例_JavaScript_CSS_下载.zip

    在电子(Electron)框架中运行后台任务是一个常见的需求,特别是在构建桌面应用程序时。这个名为“在电子中运行后台任务的示例_JavaScript_CSS_下载.zip”的压缩包可能包含了一个示例项目,用于演示如何在Electron...

    WEB开发后台模板

    在IT行业中,Web开发是构建互联网应用程序的核心领域,而后台模板则是快速开发高效、美观的管理界面的关键工具。"WEB开发后台模板 ASP JSP IFRAME 模板"这个标题揭示了我们关注的重点在于使用特定技术栈创建的Web...

    quartz单机和WEB应用

    在Web应用程序中集成Quartz,可以实现后台任务的自动化处理,比如数据同步、报表生成、邮件发送等。这篇博客“quartz单机和WEB应用”可能是探讨如何在单机环境下配置和使用Quartz,以及如何在Web应用中集成Quartz来...

    java web使用监听器实现定时周期性执行任务demo

    例如,ServletContextListener可以在Web应用启动和停止时执行代码,HttpSessionListener可以监听会话的创建和销毁。在这个场景中,我们将使用一个特定的监听器,即ServletContextListener,来实现定时任务。 1. **...

    Java定时器在Web中的应用.doc

    总结,Java定时器在Web中的应用通过`java.util.Timer`和`ServletContextListener`可以实现Web应用启动时自动执行定时任务的功能。这在诸如数据清理、统计分析、系统监控等场景中非常有用。同时,通过结合Spring等...

    java web定时任务 实例

    在Java Web应用中,为了使定时任务在服务器启动时自动运行,通常会将任务注入到一个Servlet容器初始化参数(如`ServletContextListener`)中。当Web应用加载时,监听器会启动任务。此外,Spring Boot提供了`@...

    Spring定时任务(Web项目)

    1. 定时任务通常在Spring容器启动后立即运行,因此需要确保Spring容器在Web应用启动时已完成初始化。 2. 如果定时任务涉及数据库操作,需要确保数据库连接已经建立并可用。 3. 为了防止并发执行,可使用`@...

    quartz Web应用实例

    Quartz 是一个强大的、开放源码的作业调度...通过学习和实践这个实例,开发者不仅可以掌握 Quartz 的基本使用,还能了解到如何在实际项目中优雅地管理后台任务。无论你是初学者还是经验丰富的开发者,都能从中受益。

    基于Django快速开发Web应用

    6. **运行服务器**:使用`python manage.py runserver`命令启动开发服务器,然后在浏览器中访问应用。 **三、Django特色功能** 1. **内置ORM(对象关系映射)**:Django的ORM使得开发者可以用Python代码操作数据库...

    web定时器组件

    1. ServletContextListener:创建一个实现了ServletContextListener接口的类,重写contextInitialized方法,在Web应用启动时初始化定时任务。 2. Filter:利用Filter,可以在每次请求前或后执行定时任务,但这可能会...

    Web系统后台通用管理模板

    【Web系统后台通用管理模板】是一款专为Web应用程序设计的后台管理系统模板,旨在提供一个高效、易用且功能丰富的框架,以快速构建和定制企业级的后台管理界面。这款模板通常包含了登录、权限管理、数据展示、表单...

    oracle SOA Web应用发布过程

    在Oracle SOA环境中,Web应用的发布是一个关键步骤,确保了服务能够正确地在SOA基础设施上运行并被其他系统调用。以下是对Oracle SOA Web应用发布过程的详细说明: 1. **登录到Oracle企业管理器(Oracle Enterprise...

    quartz定时任务,在web项目中的使用方法

    - 在Web应用启动时,你需要将Job和Trigger关联并添加到Scheduler中。 ```java Scheduler scheduler = new QuartzConfig().scheduler(); JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob...

    c# WebApi Winform托管

    在多线程编程中,主线程通常负责处理用户界面(UI),而其他线程则执行后台任务。为了防止UI线程阻塞,后台任务通常在子线程上执行。在Winform中,如果需要更新UI,必须确保操作在UI线程上进行,这通常通过控件的`...

    后台框架 web

    在许多框架中,开发者会提供一个基础的示例应用或模板(如“switchframe”),用于演示如何快速启动一个新的后台项目,包含基本的路由、模型、视图和控制器等元素。 基于以上信息,我们可以深入讨论以下几个关键...

Global site tag (gtag.js) - Google Analytics