【发布时间】:2012-01-18 22:41:44
【问题描述】:
我尝试使用计时器服务执行一小段代码。
我在网上找不到好的示例或教程。 Oracle 的教程涵盖的内容有点太快了,以至于我无法掌握我需要的基本实用程序。我只希望它在程序启动时立即执行,然后每隔一小时执行一次。
示例计时器是什么样的?
【问题讨论】:
标签: jakarta-ee ejb
我尝试使用计时器服务执行一小段代码。
我在网上找不到好的示例或教程。 Oracle 的教程涵盖的内容有点太快了,以至于我无法掌握我需要的基本实用程序。我只希望它在程序启动时立即执行,然后每隔一小时执行一次。
示例计时器是什么样的?
【问题讨论】:
标签: jakarta-ee ejb
使用@Singleton @Schedule 和一个额外的@PostConstruct 在构造后直接调用该方法是最简单的:
package com.example;
import javax.annotation.PostConstruct;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
@Singleton
public class SomeBackgroundJob {
@PostConstruct
@Schedule(hour="*/1", minute="0", second="0", persistent=false)
public void run() {
// Do your job here.
}
}
唯一的区别是它不是在启动后每小时运行一次,而是在启动后每隔一小时运行一次。我认为这应该无关紧要?
【讨论】:
@Singleton 和@PostConstruct 只有在您将其注入其他地方时才会调用它。您还需要添加 @Startup 以使其在启动时调用。但是,如果您已经拥有 @Schedule,则没有必要这样做。
如果您希望计时器每小时运行一次,请使用一周中的某天来容器化该小时。这是一个例子
@Schedule(dayOfWeek = "*", hour = "*/1", persistent = false)
public void run() {
// Do your job here.
}
【讨论】: