@Schedule 注释每隔几分钟(或几秒钟)运行一次

Posted

技术标签:

【中文标题】@Schedule 注释每隔几分钟(或几秒钟)运行一次【英文标题】:@Schedule annotation run every few minutes (or seconds) 【发布时间】: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 计划任务工作?

【问题讨论】:

【参考方案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)

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

【讨论】:

以上是关于@Schedule 注释每隔几分钟(或几秒钟)运行一次的主要内容,如果未能解决你的问题,请参考以下文章

怎么让windows计划任务每隔几分钟运行一次?

VBA Macro On Timer样式每隔几秒钟运行代码,即120秒

每隔几秒钟执行一次进程

检查鼠标按钮是不是按下按钮/图片并每隔几秒钟继续执行一个功能直到按下按钮?

电脑隔几分钟就出现〈结束/Esc〉怎么事

每隔几分钟轮询一次 gps 强度