1

アプリケーションでの同時処理のためのSpring ThreadPoolTask​​Executor 。すべてのジョブが正常に完了すると、showdown メソッドが呼び出されます。この実装は正常に機能しています。junit の実行時に問題が発生します。

SpringJUnit4ClassRunnerを使用して、このクラスの複数のテスト ケースを作成しました。最初のテスト ケースは完全に実行され、ThreadPoolTask​​Executor がシャットダウンされます。しかし、2 番目のテスト ケースがタスクを送信しようとすると、以下の例外が発生します。

org.springframework.core.task.TaskRejectedException: Executor [java.util.concurrent.ThreadPoolExecutor@16cefa8] did not accept task: com.sample.SampleJob@ea3cdf
    ....
aused by: java.util.concurrent.RejectedExecutionException
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:767)

私の分析に基づいて、シャットダウン時にタスクを ThreadPoolExecutor に送信しようとしているため、例外がスローされます。

この問題の解決を手伝ってくれる人はいますか?

4

2 に答える 2

1

エグゼキューターをいつシャットダウンするかはわかりませんが、すべてのテストケースの後にシャットダウンを呼び出すべきではなく、すべてのテストケースの最後に呼び出す必要があると思います。次のように使用できます。

@AfterClass
public void tearDown(){
 //shutdown your executor
}

それが役に立てば幸い :)

于 2013-12-03T14:56:09.983 に答える
0

SpringJUnit4ClassRunnerデフォルトでは、各テスト メソッドの実行後にアプリケーション コンテキストを再作成しないことに注意してください。

これはExecutor、コンテキストで your が宣言され、テスト メソッドの実行後にシャットダウンした場合、他のテスト メソッドで使用できないことを意味します。

テストメソッドに注釈を付けて、コンテキスト@DirtiesContextSpringJUnit4ClassRunner再作成することができます。

于 2012-11-07T12:37:29.197 に答える