我们有一个流程,我们有一个属性文件参考,如下所示
"context:property-placeholder location="httpdemo.${country}.properties"
现在我们希望在部署时将${country}
值替换为实际值。
我们知道实现它的一种方法是将国家/地区的值设置为ESB上的环境变量并进行部署。但由于以下原因,我们不想这样做:
我们并行为多个国家/地区部署相同的代码库
环境属性只能在mule运行时启动时设置,所以如果我将env变量设置为country=UK
并已部署到UK。稍后我想再次部署MY我需要通过设置country=MY
来重启ESB。
如果还有其他更好的方式,请告诉我
答案 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
您可能需要查看the documentation