Mule:使用spring bean属性在flow.xml中指定连接器属性

时间:2014-12-30 13:28:37

标签: spring mule mule-el

使用 mule应用程序,其中需要从集中式数据库中指定连接器属性。我接下来的方法是在春天上下文的开头,从具有不可修改的映射的bean中的数据库中收集数据。如何使用Mule中的spring bean hashmap属性指定流元素的属性。

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

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

4 个答案:

答案 0 :(得分:0)

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

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

但是,无法保证在构造文件端点时注册 applicationConfig bean。

希望它有所帮助。

答案 1 :(得分:0)

尽量远离注册表,它意味着在启动时使用,如果你从MEL使用它会非常慢,每次都会执行表达式,你必须指责并希望MEL缓存可以帮助您完成性能。

这是一个非常常见的场景,你有很多选择,但更容易利用现有的spring属性占位符,然后你可以使用${myPropertyName}。请参阅herehere教程,了解如何使用开源软件zuul而不是自定义数据库来完全按照您的意思去做。如果它符合您的需要,我会按照这种方式。

答案 2 :(得分:0)

我对我们所做的PoC有同样的要求并创建了Spring JDBC Placeholder Configurer

使用此占位符配置程序,您可以使用自己的自定义SQL语句加载任何JDBC数据源的属性,并使用flow xml中的普通弹簧占位符${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存储库中。

答案 3 :(得分:0)

通过在f​​low.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"/>