Jboss7中ejb3使用@Schedule调度器总是每分钟执行
1 问题:当我尝试着去开发一个ejb3的@Schedule调度器来执行我预定每5秒钟执行一次的任务时。我意外的发现无论我怎么设置,该@Schedule以每分钟来运行。
import java.text.SimpleDateFormat; import java.util.Date; import javax.ejb.Schedule; import javax.ejb.Stateless; /** * 845885222@qq.com * @author youyou */ @Stateless public class MakeHtmlSchedule { @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false) public void doWork() { Date currentTime = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z"); System.out.println("ScheduleExample.doWork() invoked at " + simpleDateFormat.format(currentTime)); } }2 一个定时调度器不一定是@singleton注解的对象,也可以使用@Stateless,甚至使用@Stateful的bean。如果使用的@Stateless或者@Stateful,那么doWork()方法只会是每分钟调用一次。改动为使用@Singleton装饰,就可以实现每10秒运行一次doWork()方法了。
import java.text.SimpleDateFormat; import java.util.Date; import javax.ejb.Schedule; import javax.ejb.Singleton; /** * 845885222@qq.com * @author youyou */ @Singleton public class MakeHtmlSchedule { @Schedule(second = "*/10", minute = "*", hour = "*", persistent = false) public void doWork() { Date currentTime = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z"); System.out.println("ScheduleExample.doWork() invoked at " + simpleDateFormat.format(currentTime)); } }
每10秒钟执行一次的效果:
VEIGHT 2015-01-31 22:59:00,002 INFO (EJB default - 5) ScheduleExample.doWork() invoked at 2015.01.31 公元 at 22:59:00 CST VEIGHT 2015-01-31 22:59:10,002 INFO (EJB default - 7) ScheduleExample.doWork() invoked at 2015.01.31 公元 at 22:59:10 CST VEIGHT 2015-01-31 22:59:20,001 INFO (EJB default - 8) ScheduleExample.doWork() invoked at 2015.01.31 公元 at 22:59:20 CST
3 参考链接:http://www.adam-bien.com/roller/abien/entry/simplest_possible_ejb_3_16