2017-04-15 18 views
2

私はSpringとHibernateを使ってJava REST Webサービスを開発しています。私は、将来の仕事をスケジュールする機能を実装する必要があります。たとえば、ユーザーが自分のアプリケーションにサインアップすると、最初の6ヶ月間に自分のアカウントに100バーチャルクレジットをクレジットする必要があります。このように、より類似した機能がいくつかあります。Spring Webサービスでスケジュールされたタスクを実装する方法は?

私はTimerTaskがこの機能に使用できると思っています。問題は、登録するユーザーごとにTimerを作成すると、彼が非アクティブになった場合に特定のユーザーのTimerを停止することができず、スレッドをメモリにダンプするようです。 1000人のユーザーが登録すると、1000 TimerTaskスレッドがあります。

SpringまたはJavaを使用してこの種の機能を実装する方法は?私はスレッドを完全に制御する必要があります、私はスレッドを停止することができます私が欲しい場合。

+0

よう@Scheduled注釈を配置するために必要だと、あなたは長い間、再起動の必要性や故障強制再起動することなく、あなたのプログラムがこれを実行していることを確認していますか?私はあなたがむしろどこかにこのデータを保存し、定期的な条件をチェックする解決策が必要だと思う。 –

+0

はい。私はTomcat Serverを使用しています。それはいつかクラッシュして下に行く、私はそれを戻すためにサーバーを再起動する必要があります。 – Mdumanoj

+0

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.htmlを参照してください。 – rvit34

答えて

0

あなたは@scheduledアノテーションと最小限のXML設定でタスクを実行するためにシングルスレッドを使用できますが、私はreferenceのリンクを残しておきます。

あなたは自分のサービスでメソッドを作成し、

@Scheduled(cron = "0 15 10 15 * ?") 
public void scheduleTaskUsingCronExpression(){ 
long now = System.currentTimeMillis()/1000; 
System.out.println("schedule tasks using cron jobs - " + now); 
} 
+0

はいこれを使用してジョブをスケジュールできます。しかし、私はどのように仕事を止めることができます。私が10分ごとにジョブを実行するようにスケジュールした場合、何らかの理由でこの実行を停止したいのですが、どうすればいいですか? – Mdumanoj

+0

ジョブを停止しようとしないでください!代わりに、スケジュールされたタスクの中でブールチェックをしてください!そして、ブール変数を変更して、サービスを停止して開始することができます...うまくupvoteし、それが動作すれば私の答えを受け入れる! –

+0

これは正しい方法ではないと思います。実際には 'TimerTask'が実行されており、永遠に実行されるためです。 – Mdumanoj

関連する問題