摘要
我们常常在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应用程序开发中,有时我们需要在应用程序启动时自动运行某些服务或任务,例如定时任务、数据同步等。本文将介绍一种利用Servlet上下文监听器(ServletContextListener)和...
这个插件在Web应用启动时会被调用,通过配置参数如`startOnLoad`和`startupDelay`来控制调度器的启动时间和延迟。 下面是一个简单的插件配置示例: ```xml ``` 接着,我们需要创建一个名为`SchedulerPlugIn...
`@EnableScheduling`注解会启动一个后台任务调度器,定期检查是否存在需要运行的`@Scheduled`方法。 2. **定义定时任务**:在需要执行定时任务的类上,我们可以定义一个或多个`@Scheduled`注解的方法。例如: ```...
综上所述,通过C#的定时任务和Windows服务自启动,我们可以构建一个能够后台运行,即使在网站关闭时也能持续执行的WEB应用程序定时任务系统。这样的系统对于监控、自动化工作流或者定期维护操作非常有用,能够大大...
在电子(Electron)框架中运行后台任务是一个常见的需求,特别是在构建桌面应用程序时。这个名为“在电子中运行后台任务的示例_JavaScript_CSS_下载.zip”的压缩包可能包含了一个示例项目,用于演示如何在Electron...
在IT行业中,Web开发是构建互联网应用程序的核心领域,而后台模板则是快速开发高效、美观的管理界面的关键工具。"WEB开发后台模板 ASP JSP IFRAME 模板"这个标题揭示了我们关注的重点在于使用特定技术栈创建的Web...
在Web应用程序中集成Quartz,可以实现后台任务的自动化处理,比如数据同步、报表生成、邮件发送等。这篇博客“quartz单机和WEB应用”可能是探讨如何在单机环境下配置和使用Quartz,以及如何在Web应用中集成Quartz来...
例如,ServletContextListener可以在Web应用启动和停止时执行代码,HttpSessionListener可以监听会话的创建和销毁。在这个场景中,我们将使用一个特定的监听器,即ServletContextListener,来实现定时任务。 1. **...
总结,Java定时器在Web中的应用通过`java.util.Timer`和`ServletContextListener`可以实现Web应用启动时自动执行定时任务的功能。这在诸如数据清理、统计分析、系统监控等场景中非常有用。同时,通过结合Spring等...
在Java Web应用中,为了使定时任务在服务器启动时自动运行,通常会将任务注入到一个Servlet容器初始化参数(如`ServletContextListener`)中。当Web应用加载时,监听器会启动任务。此外,Spring Boot提供了`@...
1. 定时任务通常在Spring容器启动后立即运行,因此需要确保Spring容器在Web应用启动时已完成初始化。 2. 如果定时任务涉及数据库操作,需要确保数据库连接已经建立并可用。 3. 为了防止并发执行,可使用`@...
Quartz 是一个强大的、开放源码的作业调度...通过学习和实践这个实例,开发者不仅可以掌握 Quartz 的基本使用,还能了解到如何在实际项目中优雅地管理后台任务。无论你是初学者还是经验丰富的开发者,都能从中受益。
6. **运行服务器**:使用`python manage.py runserver`命令启动开发服务器,然后在浏览器中访问应用。 **三、Django特色功能** 1. **内置ORM(对象关系映射)**:Django的ORM使得开发者可以用Python代码操作数据库...
1. ServletContextListener:创建一个实现了ServletContextListener接口的类,重写contextInitialized方法,在Web应用启动时初始化定时任务。 2. Filter:利用Filter,可以在每次请求前或后执行定时任务,但这可能会...
【Web系统后台通用管理模板】是一款专为Web应用程序设计的后台管理系统模板,旨在提供一个高效、易用且功能丰富的框架,以快速构建和定制企业级的后台管理界面。这款模板通常包含了登录、权限管理、数据展示、表单...
在Oracle SOA环境中,Web应用的发布是一个关键步骤,确保了服务能够正确地在SOA基础设施上运行并被其他系统调用。以下是对Oracle SOA Web应用发布过程的详细说明: 1. **登录到Oracle企业管理器(Oracle Enterprise...
- 在Web应用启动时,你需要将Job和Trigger关联并添加到Scheduler中。 ```java Scheduler scheduler = new QuartzConfig().scheduler(); JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob...
在多线程编程中,主线程通常负责处理用户界面(UI),而其他线程则执行后台任务。为了防止UI线程阻塞,后台任务通常在子线程上执行。在Winform中,如果需要更新UI,必须确保操作在UI线程上进行,这通常通过控件的`...
在许多框架中,开发者会提供一个基础的示例应用或模板(如“switchframe”),用于演示如何快速启动一个新的后台项目,包含基本的路由、模型、视图和控制器等元素。 基于以上信息,我们可以深入讨论以下几个关键...