ejb3.0定时执行任务
ejb3提供了,定时执行某项任务的功能
实现步骤:
1 . 创建一个sessionbean 和对应的接口 这个没什么特殊,跟以往一样
2. 获取一个sessionContext对象
3 . 在sessionContext中get到TimerService
4. 在TimeService中获取到Timer对象,创建该对象时候第一个参数代表定时任务开始执行的时间(精确到毫秒),第二个参数代表建个多久,第三个为传入的参数(这个参数在执行任务的时候可以取到)
5.写一个方法,名称规则为public xxx(Timer timer)
6. 用annotation Timeout修饰这个方法
代码实现
package com.foshanshop.ejb3.timer;
package com.foshanshop.ejb3.timer;
publicinterface TimerService
{
publicvoid scheduleTimer(long milliseconds);
}
package com.foshanshop.ejb3.timer;
import java.util.Date;
import javax.annotation.Resource;
import javax.ejb.Remote;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
@Stateless
@Remote({TimerService.class})
publicclass TimerServiceBean implements TimerService
{
intcount = 0;
public@Resource SessionContext sctx;
publicvoid scheduleTimer(long milliseconds)
{
sctx.getTimerService().createTimer(new Date(new Date().getTime()+milliseconds),milliseconds,"我的第一个定时器");
System.out.println("begin");
}
@Timeout
publicvoid timeoutHandler(Timer time)
{
System.out.println("定时器发生"+time.getInfo());
count++;
if(count>5)
time.cancel();
}
public SessionContext getSctx()
{
returnsctx;
}
publicvoid setSctx(SessionContext sctx)
{
this.sctx = sctx;
}
}
执行结果
11:03:15,750 INFO [STDOUT] begin
11:03:16,750 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:17,765 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:18,750 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:19,750 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:20,750 INFO [STDOUT] 定时器发生我的第一个定时器
11:03:21,750 INFO [STDOUT] 定时器发生我的第一个定时器