在EJB中清除@Schedule的缓存

时间:2017-09-13 17:51:58

标签: java ejb wildfly job-scheduling

我有一个单例类,可以在某个时间间隔内执行任务。当应用程序开始全部正常时,任务在正确的时间内运行,并且该间隔足以让任何任务不重叠。

课程如下:

@Singleton
@Startup
public class BOTAnalisaSituacao {
    public BOTAnalisaSituacao() throws FileNotFoundException {
    }

    @Schedule(second = "0", minute = "*/1", hour = "*")
    public void analisar() throws Exception {
        System.out.println("Starting");
        System.out.println("DONE");
    }
 }

使用的Web容器是Wildfly 10。

问题是,例如,当应用程序在一小时后启动时,顺序执行任务,在这种情况下所有60个调用,之后1分钟的时间段自行恢复。 我是否必须清除任何缓存以避免吮吸行为?

1 个答案:

答案 0 :(得分:0)

默认情况下,计时器是持久的。如果服务器关闭或崩溃,则会保存持久性计时器,并在服务器重新启动时再次激活。如果持久计时器在服务器关闭时到期,则将调用所有丢失的计时器。 通过调用将persistent=false添加到注释:

来创建非持久性编程计时器
@Schedule(second = "0", minute = "*/1", hour = "*",persistent=false)
    public void analisar() throws Exception {
        System.out.println("Starting");
        System.out.println("DONE");
    }

来源:http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html#bnbpa