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

ある問題は、たとえば、タスクが実行され、アプリケーションがダウンし、1時間後に開始された場合には、この場合、60回の通話がすべて行われ、その後1分の期間がそれ自身で復元されます。 吸う行為を避けるためにキャッシュをクリアする必要がありますか?

+0

あなたは、「アプリケーションがダウンして1時間後に再開されたとき」とはどういう意味ですか? –

+0

アプリケーションは常に実行されている必要がありますが、障害が発生した場合はすべてのスケジュールタスクを失う必要があります。実際には、「アプリケーションが1時間後に開始されたとき」を意味します。 @Scheduleにパラメータ "persistence = false"を追加して作業しました。 –

答えて

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

関連する問題