我有一个带有4个阻塞队列的spring bean。为每个队列分配一个方法(名为processQueueX()),该方法在该队列上调用take()并从队列中处理所采用的对象。
我想在app启动时在一个单独的线程中调用这些方法。 我尝试使用任务调度程序和固定延迟设置,但这在某种程度上阻止了tomcat并且它停止响应请求。每个方法都需要调用一次,所以我猜测调度是一个坏主意。
Init方法也不起作用,因为它在单个线程中工作,每个方法都有无限循环来永远处理队列。
有没有办法以类似于任务名称空间的方式从spring配置文件声明性地调用这些方法?还是以编程方式?
TNX
答案 0 :(得分:0)
我认为使用调度程序并不是一个坏主意,使用简单触发器的Quart调度程序,因此quarz将为您执行线程并且tomcat不受影响。并且使用足够数量的线程配置quartz。
答案 1 :(得分:0)
23.4. The Spring TaskExecutor abstraction会有帮助吗?
如果示例具有MessagePrinterTask
类,您可能会有类似的,但您的run()
方法将访问其中一个队列。您可以设置Spring配置以将其中一个队列注入任务,因此根据队列的相似程度,您可以使用相同的Runnable
任务。