【问题标题】:Mule dynamic property file referenceMule 动态属性文件参考
【发布时间】:2017-02-13 14:30:47
【问题描述】:

我们有一个流程,我们有下面给出的属性文件参考

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

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

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

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

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

如果有其他更好的方法请告诉我

【问题讨论】:

  • 如果您为 StackOverflow 添加了引号,则您给出的示例包含过多引号或过少引号。请使用代码格式对其进行编辑和修复。

标签: mule mule-component


【解决方案1】:

我们遇到过类似的情况,我们需要让同一个应用程序的多个版本并行运行。我们为此使用的解决方案是将属性文件与构建一起打包,并且没有动态元素(基于环境)。例如;在这种情况下,我们构建 httpdemo.usa.properties 并将其与应用程序一起打包。这对我们来说相当容易,因为我们使用 Jenkins 来管理我们的构建和发布。当构建发布时,我们引用来自 Jenkins 的配置文件,其中包含所有特定的“国家”相关属性。您甚至可以将此国家/地区作为参数传递给构建定义。使用自定义 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。希望这会有所帮助!

【讨论】:

    【解决方案2】:

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

    <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" />
    

    【讨论】:

      【解决方案3】:

      您可以使用 -M-Dmule.country=your-value 选项运行您的本地 Mule 服务器

      你可能想看看the documentation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        • 2021-04-12
        • 2019-01-01
        相关资源
        最近更新 更多