我对Mule的上下文属性占位符有疑问,我有两个文件设置如下:
<context:property-placeholder location="classpath:mule-app-1.properties, file:///etc/mule/conf/mule-app-2.properties" />
首先这是一个有效的配置,其次哪个文件优先于另一个? app1或app2文件?
-S
答案 0 :(得分:9)
每个都将依次加载,覆盖第一个重复的属性。因此,在您的情况下,mule-app-2.properties中定义的属性将优先。
在this article的末尾,我描述了使用此方法提供特定于环境的配置属性。
答案 1 :(得分:3)
是的,您可以通过Mule上下文属性占位符加载多个文件。正确的方法是将属性文件放在src/main/resources
中,此文件夹位于类路径中,然后指定如下内容:
<context:property-placeholder location="mule-app-1.properties, mule-app-2.properties" />
我不确定您为什么要在其中定义重复的属性
修改强>
要指定加载多个文件的顺序,请使用order
属性:
<context:property-placeholder location="mule-app-1.properties" order="1"/>
<context:property-placeholder location="mule-app-2.properties" order="2"/>
答案 2 :(得分:2)
您的配置应如下所示:
<context:property-placeholder location="mule-app.properties, file:C://Users//schiraboina//Desktop//123.txt"/>
在上面的例子中,您尝试使用'$ {key_name}'读取值。优先顺序将是 1. mule-app.properties 2.从外部位置读取文件
答案 3 :(得分:0)
我也遇到过同样的情况。以下是我的实践经验的结果:
如果两个文件都存在于项目或服务器中,则两者都将在项目/应用程序启动期间加载。如果文件不可用,它将在运行应用程序时抛出异常(java.io.FileNotFoundException:系统找不到指定的文件)。
使用多个属性文件并了解优先级非常有趣。在这种情况下,将加载两个属性文件,因此将在运行时加载在两个文件中定义的属性。但是,mule总是优先考虑最后声明的文件,以防两个文件中定义了相同的属性,并且没有定义其他属性,如 order 。
例如,如果在内部声明了&#34; db.dbname = test_university&#34; 属性 &#34; mule-app-1.properties&#34; 和&#34; db.dbname = university&#34; &#34; mule -app-2.properties&#34; 然后 $ {db.dbname} 在config xml中将加载 &#34; university& #34; 强>
答案 4 :(得分:0)
有关此问题的详细信息。将读取数据,首先选择CLASSPATH中的数据,然后读取文件中的数据!
答案 5 :(得分:0)
Spring将依次加载每个资源的属性,在多次找到属性时覆盖属性。这允许您为属性提供默认值,并根据环境对其进行自定义。
例如:
<context:property-placeholder
location="classpath:myapp-config.properties,classpath:myapp-config-${MULE_ENV}.properties,file:/opt/mule/conf/${MULE_ENV}/myapp-config.properties"
ignore-resource-not-found="true"
ignore-unresolvable="true" />
这与您上面提到的非常类似,并回答您的问题:
请参阅此链接以获取更多详细信息: http://confluex.com/blog/integration-software-is-software/
答案 6 :(得分:0)
By Tim Hennekey 你可以在Spring中使用这个例子:
<spring:bean id="property-placeholderInstance" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" name="Bean">
<spring:property name="locations">
<spring:list>
<spring:value>file:${mule.home}/conf/PropertyFile1.properties</spring:value>
<spring:value>file:${mule.home}/conf/PropertyFile2.properties</spring:value>
</spring:list>
</spring:property>
</spring:bean>