将任务提交给ThreadPoolTask​​Executor时RejectedExecutionException

时间:2012-11-07 12:24:53

标签: java spring junit

spring ThreadPoolTask​​Executor ,用于我们的应用程序中的并发处理。成功完成所有作业后,将调用showdown方法。这个实现工作正常,在junit执行时出现问题。

我使用 SpringJUnit4ClassRunner 为这个类编写了多个测试用例。第一个测试用例将完美运行并关闭ThreadPoolTask​​Executor。但是当第二个测试用例试图提交任务时,会引发以下异常

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。

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

不确定何时关闭执行程序,但我认为在每个测试用例之后都不应该调用shutdown,但是应该在所有测试用例结束时调用它。你可以使用follwoing:

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

希望有所帮助:)

答案 1 :(得分:0)

请注意,默认情况下SpringJUnit4ClassRunner在执行每个测试方法后不会重新创建应用程序上下文。

这意味着如果在上下文中声明了Executor并且在执行测试方法后关闭了,则无法在其他测试方法中使用它。

您可以使用@DirtiesContext对测试方法进行注释,以使SpringJUnit4ClassRunner重新创建上下文。