是否可以在ThreadPoolTask​​Executor中使队列持久化

时间:2013-08-22 22:32:54

标签: spring queue threadpool persistent threadpoolexecutor

我使用Spring TaskExecutorThreadPoolTaskExecutor实现来实现带有线程池的异步队列。存储在队列中的对象是小JSONObjects(最多40个字节),但对象的数量将非常大,最多可达100,000个。

现在已经向我们提出了一项新要求,要求使此队列保持持久性,以便它可以在JVM /服务器重新启动后继续存在。是否有一种有效的方法来保持此队列重用上述实现并且不会在我的应用程序中引入太多复杂性?我可以使用TaskExecutor配置中的某些内容来实现此目标,还是必须使用其他内容(如JMS)或自定义解决方案(如写入文件)?

任何帮助/想法将不胜感激。

1 个答案:

答案 0 :(得分:1)

ThreadPoolTask​​Executor仅适用于Runnable对象,因此它没有可序列化的对象概念,这些对象恰好在runnable中处理。

如果需要保留对象,则需要在执行之前执行此操作,然后使用重新启动后重新提交它们的服务。如果要标记执行完成,则runnable可以在其进程结束时删除持久性,或者您可以在ThreadPoolTask​​Executor上使用submit方法并监视Future。

也可以编写一个可以放在TaskExecutor上的顾问程序(因为在你的情况下它可能是一个Spring托管bean),并在那里实现持久化逻辑。