spring ThreadPoolTaskExecutor 用于在我们的应用程序中进行并发处理。成功完成所有作业后,将调用摊牌方法。这个实现工作正常,执行 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 关闭时将任务提交给它。
有人可以帮我解决这个问题吗?
不确定何时关闭执行器,但我认为不应在每个测试用例之后调用 shutdown,而应该在所有测试用例结束时调用 shutdown。您可以使用以下内容:
@AfterClass
public void tearDown(){
//shutdown your executor
}
希望有帮助:)
我是一名优秀的程序员,十分优秀!