【问题标题】:Mule:Specifying connector properties in flow.xml using spring bean propertiesMule:使用 spring bean 属性在 flow.xml 中指定连接器属性
【发布时间】:2014-12-30 13:28:36
【问题描述】:

处理需要从集中式数据库指定连接器属性的 mule 应用程序。我正在遵循的方法是在 spring 上下文开始时从具有不可修改映射的 bean 中的数据库中收集数据。如何在 Mule 中使用 spring bean hashmap 属性指定流元素的属性。

<file:inbound-endpoint path="#[applicationConfig.configMap['mydestination']]"/>

其中applicationConfig 是存在于spring-context.xml(不同于flow.xml)中的spring bean,它具有从数据库填充的configMap 和一个具有输入文件端点值的键mydestination。这是正确的方法还是有其他方法可以从数据库一次性配置流元素。

【问题讨论】:

    标签: spring mule mule-el


    【解决方案1】:

    在 mule 流中定义的 Spring bean 在 MuleRegistry 中注册。尝试类似以下的操作:

    <file:inbound-endpoint path="#[app.registry.applicationConfig.getConfigMap().get('mydestination')"/>
    

    但是,在构建文件端点时,不能保证 applicationConfig bean 已注册。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      尽量远离注册表,它是在启动时使用的,如果你从 MEL 使用它会非常慢,每次都会执行表达式,你必须交叉手指希望 MEL缓存为您提供性能。

      这是一种非常常见的情况,您有多种选择,但更简单的一种可能是利用现有的 spring 属性占位符,然后您可以将其与${myPropertyName} 一起使用。请参阅 herehere 的教程,了解如何使用开源软件 zuul 而不是定制的数据库来做你想做的事。如果它适合您的需求,我会按照这种方式进行。

      【讨论】:

      • 我需要从数据库而不是从 .properties 文件中收集配置数据,而且仅在启动 mule 服务时也需要收集配置数据,然后在 flow.xml 中引用该配置数据以获取连接器和其他组件属性. 除了注册表之外,还有其他方法可以引用在 spring bean 中收集的配置数据,或者如果不是 spring 上下文 bean,而不是在 flow.xml 中启动服务时的 java bean。
      • 我不确定我是否理解你的意思。为什么zuul方法无效?
      【解决方案3】:

      我对 PoC 的要求与我们创建的 Spring JDBC Placeholder Configurer 相同。

      使用这个占位符配置器,您可以使用您自己的自定义 SQL 语句加载任何 JDBC 数据源的属性,并在流 xml 中使用普通的 spring 占位符 ${propertyName}

      <bean class="com.redpill_linpro.springframework.beans.factory.config.JdbcPlaceholderConfigurer">
              <property name="dataSource" ref="dataSource" />
              <property name="selectStatement" value="SELECT value FROM properties WHERE key = ?" />
      </bean>
      

      该项目尚未在 maven Central 上可用,因此您必须构建它并将其安装在您自己的 maven 存储库中。

      【讨论】:

        【解决方案4】:

        我已经通过在 flow.xml 中导入 springcontext.xml 在 mule flow.xml 中使用 spring beans hashmap 属性来实现。代码

        <spring:beans>
            <spring:import resource="classpath:src/main/resources/spring-context.xml"/>
           </spring:beans>  
        
            <file:inbound-endpoint  path="#{applicationConfig.configMap['mydestination']}" doc:name="File"/>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多