2017-09-13 134 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