2011-08-11 5 views
3

アプリケーションは、クライアント・サーバー・モードと、サーバー・コードがクライアント・プロセスに組み込まれたスタンドアロン・モードの両方で実行されます。私は、タスクをスケジュールした春の豆のXMLでは 、スケジューラ・スレッドがデーモンスレッドではないので、アプリケーションが終了するされていないスタンドアロンモードで <task:scheduler>タスクを停止する

<task:scheduled-tasks scheduler="myScheduler"> 
     <task:scheduled ref="link-to-server" method="heartbeat" fixed-rate="1000"/> 
</task:scheduled-tasks> 

のような。どのように私はそれらを停止するか、これらのスレッドをデーモンにすることができますか?

ありがとうございました!

答えて

0

デーモンを作成しないでください。スレッドをあまりにも急に停止させると、プロセスが矛盾した状態になる可能性があります。私はSpringコンテキストの標準的なシャットダウンを考えており、そのためスケジューラは単にinterruptsすべての実行中のスレッドです。そのためにシャットダウンを判断するために、Thread.currentThread().isInterruptedをポーリングしてください。 Object.wait()のようなブロッキング方法は中断時にInterruptedExceptionを投げます。

+0

シャットダウン時のSpringコンテキストがいつわかるか分からない。このコードは多くのテストで使用されていますが、人はメインメソッドを作成し、コンテキストを作成してオブジェクトを呼び出すことがあります。今すぐこのコードをすべて変更するのは難しいでしょう。私は同じXMLでいくつかの春のソリューションを好む –

+0

SpringはJVMのシャットダウンフックを登録するので、心配する必要はありません。 –

+0

私はそれが動作していないことがわかります。 JVMはSystem.exit()を置くだけで終了します –

関連する問題