2016-10-03 38 views
0

我们有,我们有属性文件参考下面骡子动态属性文件引用

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

给出一个流量,现在我们希望可以通过实际值在部署时替换${country}值。

正如我们所知,实现它的一种方法是在ESB上将country的值设置为环境变量并进行部署。但我们并不想这样做的,由于以下原因:

  1. 我们部署并行

    多个国家相同的代码库
  2. 环境属性只能骡子运行开始时设定,所以如果我将env变量设置为country=UK并已部署到英国。后来我想再次部署MY,我需要通过设置我们不想做的country=MY重新启动ESB。

请让我知道是否有任何其他更好的你可以选择运行的前提骡服务器的方式

+0

你给要么含有太多的引号的例子或者如果将它们添加到StackOverflow中,则引号太少。请使用代码格式编辑和修复它。 – techraf

回答

0

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

你的问题的另一个解决方案可能是遵循一个命名约定到你想要使用的“country”的应用程序,并使用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。希望这可以帮助!

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