【问题标题】:Mule ESB:Context Property PlaceholderMule ESB:上下文属性占位符
【发布时间】:2013-12-06 11:00:02
【问题描述】:

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

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

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

-S

【问题讨论】:

    标签: spring mule esb


    【解决方案1】:

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

    this article 的结尾我描述了使用这种方法来提供特定于环境的配置属性。

    【讨论】:

      【解决方案2】:

      是的,您可以通过 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"/>
      

      【讨论】:

      • 那么首先加载哪个文件,app-1 还是 app-2?你知道哪个优先吗?
      • 所以我的问题确实是如果未指定 order 属性,并且我设置了两个属性文件会导致错误还是强制执行默认排序?如果是这样,默认顺序是什么。
      • 我已经回答了您的第一个问题并为您的第二个问题添加了弹簧标签,因为这实际上是一个弹簧而不是骡子问题。我建议您尝试输入重复值并检查自己的顺序
      【解决方案3】:

      你的配置应该如下:

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

      在上述情况下,您尝试使用 '${key_name}' 读取值。优先顺序为 1. mule-app.properties 2. 从外部位置读取文件

      【讨论】:

        【解决方案4】:

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

        1. 如果两个文件都存在于项目或服务器中,则两者都将在项目/应用程序启动期间加载。如果文件不可用,运行应用程序时会抛出异常(java.io.FileNotFoundException : The system cannot find the file specified)

        2. 使用多个属性文件并知道优先级是非常有趣的。在这种情况下,将加载两个属性文件,因此在两个文件中定义的属性将在运行时加载。但是,mule 总是优先考虑最后声明的文件,以防两个文件中定义了相同的属性并且没有定义像 order 这样的附加属性。

          例如,如果在
          "mule-app-1.properties"" 中声明了属性 "db.dbname=test_university" db.dbname=university""mule-app-2.properties" 然后 ${db.dbname} 在 config xml 将加载 "university"

        【讨论】:

          【解决方案5】:

          有关此问题的更多信息。优先读取 CLASSPATH 中的数据,然后读取 File 中的数据!

          【讨论】:

            【解决方案6】:

            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/

            【讨论】:

              【解决方案7】:

              By Tim Hennekey 您可以将此示例用于带有 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>
              

              【讨论】:

                猜你喜欢
                • 2013-07-13
                • 1970-01-01
                • 1970-01-01
                • 2012-08-03
                • 2015-09-16
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-05-29
                相关资源
                最近更新 更多