spring ThreadPoolTaskExecutor ,用于我们的应用程序中的并发处理。成功完成所有作业后,将调用showdown方法。这个实现工作正常,在junit执行时出现问题。
我使用 SpringJUnit4ClassRunner 为这个类编写了多个测试用例。第一个测试用例将完美运行并关闭ThreadPoolTaskExecutor。但是当第二个测试用例试图提交任务时,会引发以下异常
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。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
不确定何时关闭执行程序,但我认为在每个测试用例之后都不应该调用shutdown,但是应该在所有测试用例结束时调用它。你可以使用follwoing:
@AfterClass
public void tearDown(){
//shutdown your executor
}
希望有所帮助:)
答案 1 :(得分:0)
请注意,默认情况下SpringJUnit4ClassRunner
在执行每个测试方法后不会重新创建应用程序上下文。
这意味着如果在上下文中声明了Executor
并且在执行测试方法后关闭了,则无法在其他测试方法中使用它。
您可以使用@DirtiesContext
对测试方法进行注释,以使SpringJUnit4ClassRunner
重新创建上下文。