TimerService#createTimer 忽略延迟

TimerService#createTimer Ignores Delay

我想使用 Java EE 定时器服务来创建周期性任务。 this one 之类的教程建议这样做:

@Startup
@Singleton
public class AutomaticBean {

    @Resource
    TimerService timerService;

    @PostConstruct
    public void initialize() {
        this.timerService.createTimer(0, 5000, null);
        System.out.println("AutomaticBean.initialize()");
    }

    @Timeout
    public void programmaticTimout(Timer timer) {
        System.out.println("AutomaticBean.programmaticTimout()");
    }
}

我希望每 5 秒看到一条消息。但是它每隔一秒发送一次。

11:20:13,341 INFO  [stdout] (EJB default - 6) AutomaticResendBean.programmaticTimout()
11:20:13,392 INFO  [stdout] (EJB default - 5) AutomaticResendBean.programmaticTimout()
11:20:14,340 INFO  [stdout] (EJB default - 3) AutomaticResendBean.programmaticTimout()

我不知道为什么那行不通。我也尝试了定时器服务的其他方法。 createSingleActionTimer 也没有用,它还创建了一个周期性计时器(而不是一次执行的计时器)。

问题是什么?容器是 Wildfly 16.

这个问题的答案与实际设置无关,但其他人可能有同样的问题所以这里是:

在默认情况下,JMS 计时器是使用持久的 TimerConfig 创建的。这意味着一旦你创建了一个每秒 运行s 的计时器,即使你重新启动服务器(或删除它的创建),这个计时器也会得到 运行。

事情就是这样。我每秒创建一个计时器。每秒 运行。然后我创建了一个延迟的第二个计时器。由于两者的代码都是 运行,所以我看不出我实际上有两个计时器。