在项目中使用到定时任务,出来使用Spring自带的调度之外,还可以使用Servlet上下文实现
一、创建一个Listener 类,实现ServletContextListener 接口,实现接口中的方法:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 侦听器类 和Timer 结合起来定时执行任务
*/
public class ContextListener implements ServletContextListener {
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent arg0) {
timer = new java.util.Timer(true);// 创建一个新计时器,指定其相关的线程作为守护程序运行。
//System.out.println("启动定时器");
//调度器,EarlyWarningTask() 为自定义调度任务
//初始化时就执行一次任务
timer.schedule(new EarlyWarningTask(),10, 60*60*1000);//执行任务前延迟10毫秒,执行任务的间隔60*60*1000毫秒
//System.out.println("调度任务添加完成");
}
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
//System.out.println("定时任务销毁");
}
}
二、获得Spring 的ApplicationContext配置信息,以便在调度任务中读取配置文件中的相关业务方法
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AppContext {
private static AppContext instance;
private AbstractApplicationContext appContext;
public synchronized static AppContext getInstance() {
if (instance == null) {
instance = new AppContext();
}
return instance;
}
private AppContext() {
this.appContext = new ClassPathXmlApplicationContext(
"/applicationContext.xml");
}
public AbstractApplicationContext getAppContext() {
return appContext;
}
}
三、自定义调度任务类,继承TimerTask 类
import java.util.TimerTask;
public class EarlyWarningTask extends TimerTask {
private static final int C_SCHEDULE_HOUR = 23;//执行时间23时
private static boolean isRunning = false;
//通过AppContext 类,获得配置文件中相关业务方法
//inStorageDetailImp
protected IInStorageDetailService getInStorageDetailService(){
return (IInStorageDetailService)AppContext.getInstance().getAppContext()
.getBean("inStorageDetailImp");
}
// goodsWarningImp
protected IGoodsWarningService getGoodsWarningService(){
return (IGoodsWarningService)AppContext.getInstance().getAppContext()
.getBean("goodsWarningImp");
}
// lendOutAccountImp
protected ILendOutAccountService getLendOutAccountService(){
return (ILendOutAccountService) AppContext.getInstance().getAppContext()
.getBean("lendOutAccountImp");
}
//lendOutWarningImp
protected ILendOutWarningService getLendOutWarningService(){
return (ILendOutWarningService)AppContext.getInstance().getAppContext()
.getBean("lendOutWarningImp");
}
//任务在run()方法中实现
@Override
public void run() {
Calendar cal = Calendar.getInstance() ;
if(!isRunning){
if(C_SCHEDULE_HOUR==cal.get(Calendar.HOUR_OF_DAY)){//HOUR_OF_DAY 用于 24 小时制时钟
isRunning = true;
System.out.println("执行定时任务");
//任务代码
//…………………………
isRunning = false;
System.out.println("定时任务结束");
}else {
System.out.println("未到定时任务时间");
}
}else{
System.out.println("上一个定时任务未结束");
}
}
四、web.xml配置监听
<listener>
<listener-class>com.cl.gdb.util.ContextListener</listener-class>
</listener>
分享到:
相关推荐
Servlet上下文和侦听器
`getServletConfig()`和`getServletContext()`方法分别返回Servlet的配置信息和应用程序上下文。 `HttpServlet`是`GenericServlet`的子类,专门为处理HTTP协议而设计。`HttpServlet`重写了`service()`方法,根据...
在Servlet 3.0规范中,引入了Servlet上下文侦听器(ServletContextListener),它可以在Servlet容器启动时自动加载运行,并在整个WEB工程生命期中处于监听状态。 2. Java定时器 Java定时器(Timer)是Java语言中的...
其中对于xml使用jsoup进行处理,而对项目文件监听器侦听器是利用函数依附在请求,响应,上下文,会话Manger中等,当然这里侦听器仅实现了上下文。相关的服务器配置,例如生成上下文,即可以扫描webapps的目录实现,...
1. **jasper-jdt.jar**:这个JAR文件包含了JSP编译器,它使用Eclipse的JDT(Java Development Toolkit)来将JSP文件转换为Java Servlet。Jasper是Tomcat中处理JSP页面的主要组件。 2. **catalina.jar**:这是Tomcat...
Web上下文是指Web应用程序的运行环境,包含了应用的全局信息,如初始化参数、Servlet上下文对象等。在CoreWeb中,你可以看到如何访问和使用Web上下文,比如通过ServletContext获取应用配置,或者通过HttpRequest和...
在应用程序的上下文侦听器中,将 SherpaGuiceModule 添加到要由注入器加载的模块列表的末尾。 然后,使用类似的方法让 SherpaGuice 的工厂了解注射器。 还展示了如何让 Guice 处理您的 servlet 映射,而不必将它...
smallstuff-etl-filewatcher - servlet 上下文侦听器,用于检测在一组目录中登陆的文件; 支持停止、重启和报告监听器状态的 Web 服务; 然后是过滤器(例如,处理触发器文件)和处理文件(例如,将数据暂存/
28.4.2.Servlet上下文初始化 扫描Servlet,过滤器和侦听器 28.4.3.ServletWebServerApplicationContext 28.4.4.自定义嵌入式Servlet容器 程序化定制 直接自定义...
- **FacesContext**:提供关于请求和响应的上下文信息。 - **组件树**:JSF组件形成的层次结构,反映了JSP页面的结构。 - **事件和侦听器**:事件在用户操作后产生,被注册的侦听器处理。 JSF生命周期包括恢复视图...
1个通过侦听器加载的应用程序上下文几乎就像您已经完成的一样(如果调用文件applicationContext.xml并将其放在/ WEB-INF中,则甚至不需要使用上下文参数来指定其位置):代码: <listener>org.springframework....
在该方法中,为了获得Servlet上下文对象,可调用`scab`对象的(C. getServletContext)方法。 - **解析:** - `ServletContextAttributeEvent` 类提供了`getServletContext`方法来获取`ServletContext`对象。 ###...
\n\n**步骤1:调整工程结构**\n\n在原有的集成基础上,我们需要对工程结构进行微调,以便更好地分离不同的服务和管理上下文。这通常涉及创建多个子环境context,如flex和spring-mvc,让它们各自负责特定的职责。\n\n...
上下文相关资源 16.6。资源依赖性 16.7。使用资源包聚合多个资源 16.8。将JavaScript放在页面正文中 16.9。标题贡献者定位 16.10。自定义资源 16.11。安装资源 16.12。Lambda支持 16.13。共享资源 16.14。自定义资源...
api-之前和之后bean构造的注释应用笔记应用程序启动器运行嵌入式tomcat,打开端口,添加servlet并开始侦听HTTP请求使用上下文包中的可怜人的DI容器构建应用程序,并通过单例注入依赖项。 创建模型,服务和Web层...
2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)...
2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)...
尽管文档因为OCR扫描技术的限制存在一些错误和不完整的地方,但通过理解上下文和专业知识,我们还是能够提取出以下知识点: 1. 网络协议和标准 - VLAN (虚拟局域网) - NetBIOS (网络基本输入输出系统) - TCP/IP ...