gpt4 book ai didi

java - 如果满足某些条件,如何在启动过程中退出spring应用程序?

转载 作者:行者123 更新时间:2023-12-01 12:15:45 25 4
gpt4 key购买 nike

我有一个 spring 应用程序,它监听rabbitmq并处理消息,当应用程序运行时,我将在集线器数据库上注册以注意到一个实例正在运行,在注册期间如果另一个实例已经在运行,那么我需要退出应用程序而不初始化兔子连接/队列和监听器,否则某些消息可能会被错误地消耗。如何做到这一点,我知道初始化一个bean时会有回调。所以我应该创建bean并在初始化它之前检查另一个实例是否正在运行,但是如何确保这个bean将在其他bean之前初始化?但我还需要在检查bean之前初始化数据库源bean,否则它无法使用配置中定义的数据库。

 <rabbit:connection-factory id="connectionFactory" host="localhost" username="guest" password="guest" />
<rabbit:admin id="containerAdmin" connection-factory="connectionFactory" />
<rabbit:queue id="ETLQueue" name="ETLQueue" />
<rabbit:direct-exchange id="myExchange" name="ETL">
<rabbit:bindings>
<!--if doens't specifiy key here, the by default the key will be the same as queue name, and then need to send message with the correct key,
otherwise the listener can't receive the mssage-->
<rabbit:binding queue="ETLQueue" key="ETLQueue" />
</rabbit:bindings>
</rabbit:direct-exchange>

<bean id="aListener" class="com.testcom.amqp.listener.ConnectorListener" c:dataSource-ref="dataSource"/>

<!--concurrency will set how many threads running concurrently to consume the messsage, the code need to be thread safe-->
<rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory" prefetch="1" concurrency="10">
<rabbit:listener ref="aListener" queues="ETLQueue" />
</rabbit:listener-container>

最佳答案

当您使用 xml 配置时,属性 depends-on 通常有助于说明 bean 不应在目标 bean 之前初始化:

<bean id="A" .../>
<bean id="B" ... depends-on="A"/>

Bean B 应该在 A 之后初始化(除非存在一些循环依赖,在这种情况下 spring 只会尽力而为...)

关于java - 如果满足某些条件,如何在启动过程中退出spring应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27016830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com