【问题标题】:Dynamically loading SpringBean by environment var通过环境变量动态加载 SpringBean
【发布时间】:2012-05-13 22:48:54
【问题描述】:

我正在尝试找出加载 spring bean 的最佳方法,具体取决于设置的系统环境变量。我意识到这将是使用配置文件的简单任务,但不幸的是我使用的是 Spring 2.5。所以这是我的 XML 文件中的 bean 定义:

<bean id="updateBlogEntryListenerContainer"
          class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="concurrentConsumers" value="1"/>
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
        <property name="destinationName" value="queue/updateBlogEntryQueue"/>
        <property name="messageListener" ref="updateBlogEntryMessageHandler"/>
        <property name="transactionManager" ref="transactionManager"/>
        <property name="sessionTransacted" value="true"/>
        <property name="destinationResolver" ref="destinationResolver"/>
</bean>

基本上,我正在寻找一种仅根据系统环境变量的存在加载该 bean 的方法,否则,忽略它。我一直在研究 BeanPostProcessors 和 BeanFactoryPostProcessors 的使用,但不能完全确定解决方案。对此的任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: spring spring-jms


    【解决方案1】:

    您可以实现一个 FactoryBean 来检查环境变量并创建实际的 bean 或一些 NoOp 实现 - 如果没有在任何地方引用它,从 FactoryBean 返回 null 也可能有效。

    class ListenerContainerFactory extends FactoryBean<MessageListenerContainer> {
    
         MessageListenerContainer getObject() {
            if (someCondition) {
                // create and return DefaultMessageListenerContainer
            } else {
                // return null or some NoOpMessageListenerContainer
            }
         }
    }
    

    【讨论】:

    • 谢谢gkamal,我试试看!
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2019-12-17
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多