Mule动态属性文件引用

时间:2016-10-03 11:57:27

标签: mule mule-component

我们有一个流程,我们有一个属性文件参考,如下所示

"context:property-placeholder location="httpdemo.${country}.properties"

现在我们希望在部署时将${country}值替换为实际值。

我们知道实现它的一种方法是将国家/地区的值设置为ESB上的环境变量并进行部署。但由于以下原因,我们不想这样做:

  1. 我们并行为多个国家/地区部署相同的代码库

  2. 环境属性只能在mule运行时启动时设置,所以如果我将env变量设置为country=UK并已部署到UK。稍后我想再次部署MY我需要通过设置country=MY来重启ESB。

  3. 如果还有其他更好的方式,请告诉我

3 个答案:

答案 0 :(得分:0)

我们遇到类似情况,我们需要并行运行同一应用程序的多个版本。我们用于此的解决方案是将属性文件与构建一起打包,而不是具有动态元素(基于环境)。例如;在这种情况下,我们构建httpdemo.usa.properties并将其与应用程序一起打包。这对我们来说相当容易,因为我们使用Jenkins来管理我们的构建和发布。当构建发布时,我们引用Jenkins的配置文件,其中包含所有特定的" country"相关属性。您甚至可以将此国家/地区作为参数传递给构建定义。使用自定义maven插件,我们使用Jenkins属性文件中的新属性替换应用程序中的属性文件。

您的问题的另一个解决方案可能是遵循特定于"国家"的应用的命名约定。您想使用spring bean来使用和获取属性。例如;

<spring:beans>
    <spring:bean id="CountryProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <spring:property name="singleton" value="true"/>
        <spring:property name="location" value="${app.name}.properties"/>
    </spring:bean>
</spring:beans>
<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="5000" doc:name="HTTP Listener Configuration"/>
<flow name="dynamic_propsFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
    <logger message="#[app.registry.CountryProperties['country.full.name']]" level="INFO" doc:name="Logger"/>
</flow>

我的属性如下:

File - dynamic_props_usa.properties
population=10
country.full.name=united.states.of.america

File - dynamic_props_mexico.properties
population=100
country.full.name=mexico

$ {app.name}为您提供已部署的应用的名称。如果我的应用程序名为dynamic_props_usa,则它引用dynamic_props_usa.properties。如果是,dynamic_props_mexico,则引用dynamic_props_mexico.properties。希望这有帮助!

答案 1 :(得分:0)

定义上下文属性占位符以在包中包含文件引用,并且如果需要,可以在运行时覆盖与服务器相同的选项,如下所示,

<context:property-placeholder location="classpath:app-${mule.env}.properties,    file:${mule.config.path}/app-${mule.env}.properties" ignore-resource-not-found="true" ignore-unresolvable="true" />

答案 2 :(得分:-1)

您可以使用选项-M-Dmule.country=your-value

运行内部部署Mule服务器

您可能需要查看the documentation