Mule ESB:Context Property Placeholder

早过忘川 提交于 2019-12-04 01:48:58

Each will be loaded in turn, overwriting duplicate properties from the first one. So in your case, properties defined in mule-app-2.properties will take precedence.

Towards the end of this article I described using this method to provide environment specific configuration properties.

Yes, you can have multiple files loaded through Mule context property placeholder. Correct way to do it is to place the properties file in src/main/resources, this folder is in classpath and then specify something like this:

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

I am not sure why would you want to define duplicate properties in them

EDIT:

To specify order of loading multiple files, use order attribute:

<context:property-placeholder location="mule-app-1.properties" order="1"/>
<context:property-placeholder location="mule-app-2.properties" order="2"/>

Your configuration should be as follows:

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

In the above case you are trying to read the values by using '${key_name}'.The order of precedence will be 1. mule-app.properties 2. Read file from external location

I have also come across the same scenario. Below is the outcome of my practical experience:

  1. If both files exists either inside project or server, both will be loaded during the project/app startup. In case the files are not available, it will throw exception (java.io.FileNotFoundException : The system cannot find the file specified) while running the application.

  2. It is quite interesting to use multiple properties files and to know the precedence. In this case both property files will be loaded and hence properties defined inside both files will be loaded during the run time. However, mule always gives preference to the lastly declared file in case same properties are defined in both files and additional attribute like order hasn't been defined.

    For Example if there is a property "db.dbname=test_university" declared inside
    "mule-app-1.properties" and "db.dbname=university" inside "mule-app-2.properties" then ${db.dbname} inside config xml will load "university"

For further information of this question. The data will be read giving first preference for data in CLASSPATH, then the data in the File will be read!

Spring will load properties from each resource in turn, overriding properties when it finds them more than once. This allows you to provide default values for properties, and customize them per environment.

For eg:

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

This is very similar to what you have mentioned above and to answer your question:

  • Syntax is perfectly fine. No exception will be thrown
  • Mule-app-22.properties will take precedence over mule-app-1.properties.

Refer this link for more details: http://confluex.com/blog/integration-software-is-software/

By Tim Hennekey You can use this example for MULE with 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>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!