【问题标题】:@Schedule annotation run every few minutes (or seconds)@Schedule 注释每隔几分钟(或几秒钟)运行一次
【发布时间】:2012-07-14 01:00:47
【问题描述】:

我想尝试通过以下方式使用@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 计划任务工作?

【问题讨论】:

    标签: java ejb schedule


    【解决方案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 将防止它们随着时间的推移而累积。

    【讨论】:

      【解决方案2】:

      请找到以下调度程序配置的详细信息。

      (1) 每 1 分钟运行一次

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

      (2) 每 5 分钟运行一次

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

      (3) 每 30 秒运行一次

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

      (4) 每天早上 6:00 运行

      @Schedule(hour = "6", minute = "0", second = "0", persistent = false)
      

      (5) 每周五下午 2:00 运行

      @Schedule(dayOfWeek = "Fri", hour = "14", persistent = false)
      

      (6) 每月第一天凌晨 5:00 运行

      @Schedule(dayOfMonth="1", hour = "5", persistent = false)
      

      我希望这些信息可以帮助您根据需要配置调度程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多