@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 注释每隔几分钟(或几秒钟)运行一次的主要内容,如果未能解决你的问题,请参考以下文章
VBA Macro On Timer样式每隔几秒钟运行代码,即120秒