2017-09-13 132 views
0

我有一个单例类,它在某个时间间隔内执行任务。当应用程序一切正常启动时,任务在正确的时间段内运行,并且该时间间隔足够吸引任何任务不重叠。在EJB中清除@Schedule的缓存

的类是波纹管显示:

@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分钟时间自行恢复。 我是否必须清除缓存以避免吸收行为?

+0

你所说的“当应用程序是一个小时下来后重新启动”是什么意思? –

+0

应用程序必须始终运行,但如果发生故障,所有时间表任务必须丢失。实际上我的意思是“当应用程序在一小时后开始运行”。我将参数“persistence = false”添加到@Schedule并工作。 –

回答

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