@Schedule注释运行每隔几分钟(或秒)(@Schedule annotation run ev

2019-07-30 10:20发布

我想尝试使用@Schedule注释以下列方式:

public class MyTestServlet extends HttpServlet {
    private static JcanLogger LOG = JcanLoggerFactory.getLogger(ServiceTestServlet.class);

    @EJB CronService cronService;

    public void service(HttpServletRequest req, HttpServletResponse resp) throws .... {
    ....
    cronService.iLive(); 
}
---
    @Local // because the ejb is in a servlet (there is no other jvm)
public interface CronService {

    public void iLive();
    public void runsEveryMinute();
}
---
@Singleton
public class CronServiceBean implements CronService {
    private static final JcanLogger LOG = JcanLoggerFactory.getLogger(CronServiceBean.class);

    @Schedule(minute="*")
    public void runsEveryMinute() {
        LOG.info(" runs EveryMinute ");
    }

    public void iLive() {
        LOG.info("iLive");

    }
 ---
 LOG
 ... 
 CronServiceBean:34  ] iLive

基于日志的CronService生活和好,但计划任务“runsEveryMinute”不工作。

它应该如何工作使用EJB计划任务?

Answer 1:

按照该Javadoc中的@Schedule注释,默认值是:

  • *对于除小时,分钟和秒的所有字段; 和
  • 0小时,分钟,和秒,默认情况下。

通过指定minute="*" ,并在其默认离开小时0 ,它请求定时器运行在午夜之后每分钟一小时(即00:00,00:01,00:02,...,00: 59),然后不再,直到第二天。 相反,使用:

@Schedule(hour="*", minute="*")

要运行每隔几秒钟(例如, 10秒),你可以使用cron的样语法:

@Schedule(hour = "*", minute = "*", second = "*/10", persistent = false)

默认情况下,调度仍然存在的事件。 设置persistent = false会阻止他们建立随着时间的推移,如果需要的话。



文章来源: @Schedule annotation run every few minutes (or seconds)