我有一个服务器端应用程序,它使用来自 JMS 队列的消息。我像这样使用 Spring 侦听器容器:
<jms:listener-container connection-factory="myConnectionFactory"
..........
concurrency="4-8">
<jms:listener id="myListener" destination="my.ems.queue" ref="listenerBean" method="method"/>
</jms:listener-container>
这很好。
这样做的一个问题是侦听器在设置后立即开始使用JMS消息。但是,Listener Bean
所依赖的一些bean需要一些时间来初始化(它需要从数据库中填充一些数据)。
因此,如果服务启动时队列中有一些挂起的JMS消息,它会在数据填充完成之前尝试为其提供服务。这导致了一些错误。
我的问题是,如何才能在数据完全填充后才自动启动监听器,以便我可以调用< code>start()方法来手动启动它?
您可以在DMLC上设置autoStartup
属性,使其在选择调用start()
之前不会启动。
另一种方法是确保在其他依赖 Bean 准备就绪之前未创建连接工厂。
<bean class="..." name="myConnectionFactory" depends-on="importantOtherBean"/>