如何让 SmartLifeCycle bean 在 SpringCamelContext 之前启动?
How to make SmartLifeCycle bean start before SpringCamelContext?
我在我的应用程序中使用 camel,我想创建一个在 CamelContext 之前启动的 SmartLifeCycle bean。
为了做到这一点,我实现了一个阶段为:Integer.MAX_VALUE - 101 的自定义 SmartLifeCycle bean。
SpringCamelContext 的阶段为:Ordered.LOWEST_PRECEDENCE
在我的电脑上运行良好,我的 bean 在 SpringCamelContext bean 之前启动。
但是一旦我在我的服务器上部署,SpringCamelContext 就会在之前启动。
知道为什么吗?我怎样才能确保我的 bean 在之前启动?
谢谢
编辑
似乎 SpringCamelContext 是一个 "LifeCycle" bean 而不是 "SmartLifeCycle" bean。根据文档:
<p>Any {@code Lifecycle} components within the context that do not also
implement {@code SmartLifecycle} will be treated as if they have a phase
value of 0. That way a {@code SmartLifecycle} implementation may start
before those {@code Lifecycle} components if it has a negative phase value,
or it may start after those components if it has a positive phase value.
但我仍然不知道如何解决这个问题(我怎么知道使用负值是否不会产生某种副作用?)为什么它可以在我的本地计算机上运行?
编辑 2:
区别在于管理配置。
如果我为管理端口使用不同的端口,并且这使用另一个配置:DifferentManagementContextConfiguration。
启动时,方法 "afterSingletonsInstantiated()" 在 Configuration 上调用,它创建一个 managementContext 并立即刷新。
此上下文在主 ApplicationContext 刷新之前和 LifeCycleProcessor 启动之前刷新。
由于其中的 ContextRefreshedEvent 侦听器,此刷新正在初始化 SpringCamelContext。
我仍在寻找解决此问题的方法...
这是一个已知错误,已在 2.24.1 camel 版本中修复
我在我的应用程序中使用 camel,我想创建一个在 CamelContext 之前启动的 SmartLifeCycle bean。
为了做到这一点,我实现了一个阶段为:Integer.MAX_VALUE - 101 的自定义 SmartLifeCycle bean。 SpringCamelContext 的阶段为:Ordered.LOWEST_PRECEDENCE
在我的电脑上运行良好,我的 bean 在 SpringCamelContext bean 之前启动。
但是一旦我在我的服务器上部署,SpringCamelContext 就会在之前启动。
知道为什么吗?我怎样才能确保我的 bean 在之前启动?
谢谢
编辑
似乎 SpringCamelContext 是一个 "LifeCycle" bean 而不是 "SmartLifeCycle" bean。根据文档:
<p>Any {@code Lifecycle} components within the context that do not also
implement {@code SmartLifecycle} will be treated as if they have a phase
value of 0. That way a {@code SmartLifecycle} implementation may start
before those {@code Lifecycle} components if it has a negative phase value,
or it may start after those components if it has a positive phase value.
但我仍然不知道如何解决这个问题(我怎么知道使用负值是否不会产生某种副作用?)为什么它可以在我的本地计算机上运行?
编辑 2:
区别在于管理配置。 如果我为管理端口使用不同的端口,并且这使用另一个配置:DifferentManagementContextConfiguration。
启动时,方法 "afterSingletonsInstantiated()" 在 Configuration 上调用,它创建一个 managementContext 并立即刷新。
此上下文在主 ApplicationContext 刷新之前和 LifeCycleProcessor 启动之前刷新。
由于其中的 ContextRefreshedEvent 侦听器,此刷新正在初始化 SpringCamelContext。
我仍在寻找解决此问题的方法...
这是一个已知错误,已在 2.24.1 camel 版本中修复