Java 如何在应用程序启动时执行Springbean的多个方法

Java 如何在应用程序启动时执行Springbean的多个方法,java,multithreading,spring,startup,Java,Multithreading,Spring,Startup,我有一个Springbean,有4个阻塞队列。为每个队列分配一个方法(名为processQueueX()),该方法调用该队列上的take(),并处理队列中的take对象 我想在应用程序启动时在单独的线程中调用这些方法中的每一个。 我尝试了任务调度器和固定延迟设置,但在某种程度上阻止了tomcat,它停止响应请求。每个方法都需要调用一次,所以我想调度是个坏主意 Init方法也不工作,因为它在单个线程中工作,每个方法都有无限的循环来处理队列 有没有一种方法可以从spring配置文件以类似于任务名称空

我有一个Springbean,有4个阻塞队列。为每个队列分配一个方法(名为processQueueX()),该方法调用该队列上的take(),并处理队列中的take对象

我想在应用程序启动时在单独的线程中调用这些方法中的每一个。 我尝试了任务调度器和固定延迟设置,但在某种程度上阻止了tomcat,它停止响应请求。每个方法都需要调用一次,所以我想调度是个坏主意

Init方法也不工作,因为它在单个线程中工作,每个方法都有无限的循环来处理队列

有没有一种方法可以从spring配置文件以类似于任务名称空间的方式声明性地调用这些方法?还是通过编程


Tnx

我认为使用调度程序不是一个坏主意,使用带简单触发器的quart调度程序,这样quarz将为您和tomcat执行线程,而不会影响。并且配置quartz的线程数量刚好足够。

会有帮助吗


如果示例中有一个
MessagePrinterTask
类,您可能会有类似的类,但是您的
run()
方法将访问其中一个队列。您可以将Spring配置设置为将其中一个队列注入到任务中,因此根据队列的相似程度,您可以使用相同的
Runnable
任务。

如果队列阻塞,是否需要在单独的线程上处理它们?在这种情况下,您建议如何启动4个线程?这是你的问题吗?是的,这就是问题。如何在应用程序启动时在单独的线程中分别执行4个方法