在Java中怎么使用定时服务计时器Timer 处理隔断执行问题


 之前就经历过使用定时器的问题,我见过的有两种方式可以实现。

具体方法可以看看这篇博文:Java 中实现定时服务 在ssh框架中跟普通工程里面创建的方式

我这里使用的是SSH1框架给大家说的就是那篇博文里面的第二种方式。

里面有涉及到很多细节问题,也是我之前"百度"and "Google" 的问题,待会儿一并标出。



首先创建一个普通类A  extends java.util.TimerTask

private static boolean isRunning = false;

@Override
public void run() {
// TODO Auto-generated method stub
if (!isRunning) {

isRunning = true;
try {
//这里调用你要执行的方法
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
isRun
ning = false;
}
}


}

//在这个类A中可以有一个带参数的构造方法QNE_OrderService qneOrderService这些对象都是通过下面定时器传过来的

public QnrAutoTicketThreadManagerTimesTask(QNE_OrderService qneOrderService) {
this.qneOrderService=qneOrderService;
}


说到定时器接着就创建一个Java类B实现一个ServletContextListener接口,这里就必须实现两个抽象方法了

contextInitialized:在Web应用启动时初始化任务 

contextDestroyed:在Web应用结束时停止任务 

大家应该注意到contextInitialized方法里面有个参数ServletContextEvent sce  就是这个参数就是我们一直苦苦寻求的在普通方法里面怎么得到request或session对象(为什么要得到这些呢?)。是想得到一些作用域里面的对象或值


ServletContext servletContext=sce.getServletContext();   // 这个很关键 得到ServletContext

看下面一段代码:

ApplicationContext app = WebApplicationContextUtils.getRequiredWebApplicationContext(sce.getServletContext());

QNE_OrderService qneOrderService = (QNE_OrderService)app.getBean("qneOrderService");   //得到spring里面的bean对象 (业务接口实现类)

//下面就可以得到你想要的了

 timer.schedule(new A(qneOrderService),NO_DELAY,1000*AutoIssueTimeLongs);

// 创建定时器

public static Timer createTimer(ServletContext servletContext){
timer=new Timer(true);

servletContext.setAttribute("timer", timer);   // 放到这里里面是保证一个应用里面只创建唯一一个 “timer”定时器对象  (当然可以在创建别的定时器)方便下次再刷新对象参数

return timer;
}


最后一步就是一个web.xml监听器配置了。

在WEB.XML中加上下面这段代码就会在服务器的时候就开启定时器了(如果需要在前台对这个定时器进行控制的话就需要再考虑了,启动了要怎么再设置多长时间启动一次?等这些问题)

<!-- 定时服务监听器 -->
<listener>
<listener-class>com.sxy.tasks.TimerManager</listener-class>
</listener>








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值