使用ServletContextListener+线程 实现Javaweb的实时后台任务和定时任务

本文介绍了如何利用ServletContextListener监听Web应用生命周期,并结合Timer实现定时任务。通过继承ServletContextListener创建监听器,配合单独线程执行计划任务。示例中包括每两分钟和三分钟执行一次的任务,且任务执行可由前端控制。此外,还探讨了一种实现不定时任务的方法,通过枚举确保线程安全。
摘要由CSDN通过智能技术生成

(一)关于ServletContextListener

 在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。

  当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法,只要定义类实现方法即可。

核心方法使用代码如下:

/**
 * 当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,
 * 并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。
 */
contextInitialized(ServletContextEvent sce) 

/**
 * 当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。
 */
contextDestroyed(ServletContextEvent sce)

 

(二)实现定时任务(使用Timer)

 Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。注意,Timer不能初始化两次,一个对象放一个Timer,否则会报初始化错误。下边看例子代码:

(1)继承ServletContextListener类实现ServletContextEvent 处理的两个方法。创建InvoiceListener  。

package com.css.listener;

import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.css.thirdparty.pool.SuNingGetInvoiceThreadPool;
import com.css.util.CheckSuNingInvoiceTimerBean;
import com.css.util.CheckSuNingReturnOrderInvoiceTimerBean;


public class InvoiceListener implements ServletContextListener{

	private Timer checkSuNingInvoiceTimer = null;//提取开票成功的任务
	private Timer checkSuNingReturnOrderInvoiceTimer = null;//提取退货的任务
	
	public void contextDestroyed(ServletContextEvent arg0) {
		checkSuNingInvoiceTimer.cancel();
		checkSuNingReturnOrderInvoiceTimer.cancel();
	}

	public void contextInitialized(ServletContextEvent arg0) {
		//(2)定时任务,隔一段时间执行的。
		checkSuNingInvoiceTimer = new Timer();
		checkSuNingInvoiceTimer.schedule(new CheckSuNingInvoiceTimerBean(), 0, 2*60*1000);//2分钟一次
		//checkSuNingInvoiceTimer.schedule(new CheckSuNingInvoice
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值