使用 mule应用程序,其中需要从集中式数据库中指定连接器属性。我接下来的方法是在春天上下文的开头,从具有不可修改的映射的bean中的数据库中收集数据。如何使用Mule中的spring bean hashmap属性指定流元素的属性。
<file:inbound-endpoint path="#[applicationConfig.configMap['mydestination']]"/>
其中applicationConfig
是spring-context.xml中存在的spring bean(与flow.xml不同),其中configMap是一个从数据库填充的hashMap,其密钥mydestination具有输入文件端点的值。这是正确的方法,还是有其他方法可以从数据库中实现一次配置流元素。
答案 0 :(得分:0)
mule流中定义的Spring bean在MuleRegistry中注册。尝试类似以下的内容:
<file:inbound-endpoint path="#[app.registry.applicationConfig.getConfigMap().get('mydestination')"/>
但是,无法保证在构造文件端点时注册 applicationConfig bean。
希望它有所帮助。
答案 1 :(得分:0)
尽量远离注册表,它意味着在启动时使用,如果你从MEL使用它会非常慢,每次都会执行表达式,你必须指责并希望MEL缓存可以帮助您完成性能。
这是一个非常常见的场景,你有很多选择,但更容易利用现有的spring属性占位符,然后你可以使用${myPropertyName}
。请参阅here和here教程,了解如何使用开源软件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)
通过在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"/>