问题 Mule ESB:上下文属性占位符


我有一个关于Mule的上下文属性占位符的问题,我有两个文件设置如下:

<context:property-placeholder location="classpath:mule-app-1.properties, file:///etc/mule/conf/mule-app-2.properties" /> 

首先这是一个有效的配置,其次哪个文件优先于另一个? app1或app2文件?

-S


4007
2017-11-21 19:21


起源



答案:


每个都将依次加载,覆盖第一个重复属性。因此,在您的情况下,mule-app-2.properties中定义的属性将优先。

接近尾声 本文 我描述了使用此方法提供特定于环境的配置属性。


9
2017-11-22 13:33





是的,您可以通过Mule上下文属性占位符加载多个文件。正确的方法是将属性文件放入 src/main/resources,这个文件夹在classpath中,然后指定如下内容:

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

3
2017-11-21 19:32



那么首先加载哪个文件,app-1或app-2?你知道哪个优先吗? - insaneyogi
看我的回答编辑 - Charu Khurana
所以我的问题是,如果未指定order属性,我有两个属性文件设置会导致错误或是否有默认排序?如果是这样,默认排序是什么。 - insaneyogi
我已经回答了你的第一个问题并为你的第二个问题增加了弹簧标签,因为这真的是一个春天,而不是骡问题。我建议你尝试重复值并检查自己的排序 - Charu Khurana


答案:


每个都将依次加载,覆盖第一个重复属性。因此,在您的情况下,mule-app-2.properties中定义的属性将优先。

接近尾声 本文 我描述了使用此方法提供特定于环境的配置属性。


9
2017-11-22 13:33





是的,您可以通过Mule上下文属性占位符加载多个文件。正确的方法是将属性文件放入 src/main/resources,这个文件夹在classpath中,然后指定如下内容:

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

3
2017-11-21 19:32



那么首先加载哪个文件,app-1或app-2?你知道哪个优先吗? - insaneyogi
看我的回答编辑 - Charu Khurana
所以我的问题是,如果未指定order属性,我有两个属性文件设置会导致错误或是否有默认排序?如果是这样,默认排序是什么。 - insaneyogi
我已经回答了你的第一个问题并为你的第二个问题增加了弹簧标签,因为这真的是一个春天,而不是骡问题。我建议你尝试重复值并检查自己的排序 - Charu Khurana


您的配置应如下所示:

 <context:property-placeholder location="mule-app.properties, file:C://Users//schiraboina//Desktop//123.txt"/>

在上面的例子中,您尝试使用'$ {key_name}'来读取值。优先顺序将是 1. mule-app.properties 2.从外部位置读取文件


2
2017-12-09 11:14





我也遇到过同样的情况。以下是我的实践经验的结果:

  1. 如果两个文件都存在于项目或服务器内,则两者都将在项目/应用程序启动期间加载。如果文件不可用,它将抛出异常 (java.io.FileNotFoundException:系统找不到指定的文件) 在运行应用程序时。

  2. 使用多个属性文件并了解优先级非常有趣。在这种情况下,将加载两个属性文件,因此将在运行时加载在两个文件中定义的属性。但是,mule总是优先考虑最后声明的文件,以防两个文件中定义相同的属性和其他属性 订购 尚未定义。

    例如,如果有属性 “db.dbname = test_university” 在里面宣布
    “mule-app-1.properties” 和 “db.dbname =大学”  内 “mule-app-2.properties” 然后 $ {} db.dbname 内部配置xml将加载 “大学”


0
2017-08-11 12:05





有关此问题的更多信息。将读取数据,首先选择CLASSPATH中的数据,然后读取文件中的数据!


0
2017-12-11 05:28





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

这与您上面提到的非常类似,并回答您的问题:

  • 语法完全没问题。不会抛出异常
  • Mule-app-22.properties将优先于mule-app-1.properties。

有关详细信息,请参阅此链接: http://confluex.com/blog/integration-software-is-software/


0
2017-08-05 19:06





蒂姆亨尼基 您可以将此示例用于Spring的MULE:

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

0
2018-06-22 17:11